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替换掉他么?
还是因为其他神马问题呢。
求大神们指点啊!
谢谢啦!!!

解决方案 »

  1.   

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

  2.   


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

  3.   

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

  4.   


    是为了实现HLS协议,
    m3u8是个索引文件,里面的内容是要不断更新的。刚刚得知,这个apache是跑在windows上的。 通过测试发现了,跑在linux下的是可以实现的。
    可能是因为windows的缘故了,正在使用,无法替换。  linux是可以替换的。