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是可以替换的。