>백엔드 개발 >PHP 튜토리얼 >php上传文件move_uploaded_file的问题

php上传文件move_uploaded_file的问题

WBOY
WBOY원래의
2016-06-23 14:16:401153검색


Linux系统下跑的apache服务器。

就是实现HLS协议播放音频:

程序上传a.m3u8和1.ts,10秒后上传a.m3u8和2.ts,...a.m3u8,3.ts...如此循环下去。
当我没有打开播放器客户端的时候 文件上传一切正常,多长时间都没问题。

当我打开播放器播放这些文件的时候,也就是访问那个a.m3u8文件时候。
这个时候上传a.m3u8 就失败了,但是上传其他文件都正常,也就是说除了文件名是a.m3u8的文件,其他文件都可以上传。

php页面接收文件的代码大致如下:

$temp_name = $_FILES['upfile']['tmp_name'];
$file_name = $_FILES['upfile']['name']; 
$file_name = str_replace("\\","",$file_name);
$file_name = str_replace("'","",$file_name);
$file_path = $upload_dir.$file_name;

//文件名字检查
if ( $file_name =="") { 
$message = "Invalid File Name Specified";
return $message;
}

$result  =  move_uploaded_file($temp_name, $file_path);
if (!chmod($file_path,0755))
$message = "change permission to 755 failed.";
 else
$message = ($result)?"$file_name uploaded successfully." : "Somthing is wrong with uploading a file.";

上传失败的时候 message 的内容是 "change permission to 755 failed."
我分析了一下result的内容是空的,说明move_uploaded_file这个函数执行失败了。
原来目录下是有a.m3u8文件的,上传失败的时候 目录下的a.m3u8文件也消失了。

各位大神,帮小弟看看这是神马问题呢?
是因为权限问题么?因为a.m3u8正在被访问,所以无法move替换掉他么?
还是因为其他神马问题呢。


求大神们指点啊 !
谢谢啦!!!






回复讨论(解决方案)

打开php的错误提示。
ini_set("display_errors",1);
error_reporting(E_ALL);
最有可能原因是move_uploaded_file的目标文件夹不具有写入的权限。

打开php的错误提示。
ini_set("display_errors",1);
error_reporting(E_ALL);
最有可能原因是move_uploaded_file的目标文件夹不具有写入的权限。

谢谢你的回答!  
由于服务器不是我能用控制的,所以 打开php的错误提示 这个方法只能明天试试看了。
可是当我在没有客户端在访问这个move_uploaded_file的目标文件的时候,一切都是正常的。
当有客户端在访问这个文件的时候,move_uploaded_file就失败了,而且原先这个move_uploaded_file的目标文件是存在的,失败之后文件就没掉了。


您不不是已经知道原因了吗? 因为a.m3u8正在被访问,所以无法move替换掉他

您不不是已经知道原因了吗? 因为a.m3u8正在被访问,所以无法move替换掉他

那我想知道  什么方法可以解决这个问题?
就是可以强制替换的。

关闭使用该文件的软件。别无他法
既然已经有了,重新上传有什么意义呢?

关闭使用该文件的软件。别无他法
既然已经有了,重新上传有什么意义呢?

是为了实现HLS协议,
m3u8是个索引文件,里面的内容是要不断更新的。

刚刚得知,这个apache是跑在windows上的。 通过测试发现了,跑在linux下的是可以实现的。
可能是因为windows的缘故了,正在使用,无法替换。  linux是可以替换的。 

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.