Ubuntu 10.04 lucid 系统。
发现原来用PHP编写的脚本中的rename()与copy()无法跨分区操作。
提示failed to open stream: No such file or directory in <略> on line <略>已经测试,如果源路径与目标路径在同一个分区,比如相同目录,就可以成功。
而如果在不同的分区,就会失败。不过从其它分区rename()至/tmp/临时目录可以成功,但是再rename()回来就直接提示失败。
已经把权限全部设为777。百思不得其解。
网上也没有找到比较合适的解释与解决方案。
其中虽然有效但是感觉不太完美的是将rename()函数替换为 system("mv ".$src." ".$Dest)我在原来的ubuntu 9.04的系统(P4 2.8G双核 1G DDR2 250GB HD)上搭建的系统就没有这个问题。
最近几天将系统迁移至新机器(E5400 2G DDR3 1TB HD)上的全新安装的ubuntu10.04上,就突然这样了。现在ubuntu 10.04里面的PHP5版本为5.3.2-lubuntu4.2 with Suhosin-Patch (cli) (built: May 13 2010 20:01:00)
刚刚查升级管理器(Update Manager)PHP相关组件有更新。更新后错误依旧。最后声明:因为论坛规定:一个用户只允许连续回复3次。
所以只能重新开贴求救。原贴地址:
http://topic.csdn.net/u/20101005/06/0cfe791c-41cf-4087-beb8-2493f261c7dd.html
发现原来用PHP编写的脚本中的rename()与copy()无法跨分区操作。
提示failed to open stream: No such file or directory in <略> on line <略>已经测试,如果源路径与目标路径在同一个分区,比如相同目录,就可以成功。
而如果在不同的分区,就会失败。不过从其它分区rename()至/tmp/临时目录可以成功,但是再rename()回来就直接提示失败。
已经把权限全部设为777。百思不得其解。
网上也没有找到比较合适的解释与解决方案。
其中虽然有效但是感觉不太完美的是将rename()函数替换为 system("mv ".$src." ".$Dest)我在原来的ubuntu 9.04的系统(P4 2.8G双核 1G DDR2 250GB HD)上搭建的系统就没有这个问题。
最近几天将系统迁移至新机器(E5400 2G DDR3 1TB HD)上的全新安装的ubuntu10.04上,就突然这样了。现在ubuntu 10.04里面的PHP5版本为5.3.2-lubuntu4.2 with Suhosin-Patch (cli) (built: May 13 2010 20:01:00)
刚刚查升级管理器(Update Manager)PHP相关组件有更新。更新后错误依旧。最后声明:因为论坛规定:一个用户只允许连续回复3次。
所以只能重新开贴求救。原贴地址:
http://topic.csdn.net/u/20101005/06/0cfe791c-41cf-4087-beb8-2493f261c7dd.html
就是说如果源地址与目的地址不在相同的分区,操作就会失败。
比如从/tmp 拷贝至/home/
/tmp 属于分区/
/home/是另外一个分区。明白了吧。
例子 1. rename() 例子 <?php
rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
?>
rename 就是读文件,写成一个新文件,再删除原有的文件
copy 就是读文件,写成一个新文件
源路径 没有问题。存在并且权限正常(777都试过了)
目标文件的文件夹(例:/home/user/login/docs/)存在并且权限正常。
但是目标文件不存在。原来这样用都没有问题。但是现在就不行了。
难道我非得提前建好一个空文件?一会儿测试一下
少打了一个字, 在PHP 4.3.3之前在linux系统下是不支持跨分区操作的
我的是PHP5。不是版本的问题吧。
光是777还不行,这两个操作还需要修改用户组,你ll命令看一下 所有者是不是 root root应该要改为 www www使用以下命令可以进行修改:chown -R www.www 你的目录
因为执行脚本的用户权限就是root,而不是apache权限的用户执行的脚本,所以感觉不应该是这个问题吧?等周一验证一下。
先谢谢LS的指点了!
用PHP内置函数 chown() 竟然无法找到默认的用户“www”
崩溃。
不过应该不是这个问题。
因为脚本本身就是Root权限执行的。
我原来运行同样脚本的服务器主机就没有出现过这个问题。而前后两台主机都是Ubuntu的系统。PHP5.X的环境。