跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

php上传文件move_uploaded_file的问题

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

相关文章