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)欢迎大虾再给指一条明路!
发现原来用PHP编写的脚本中的rename()与copy()无法跨分区操作。
提示failed to open stream: No such file or directory in <略> on line <略>已经测试,如果源路径与目标路径在同一个分区,比如相同目录,就可以成功。
而如果在不同的分区,就会失败。不过从其它分区rename()至/tmp/临时目录可以成功,但是再rename()回来就直接提示失败。
已经把权限全部设为777。百思不得其解。
网上也没有找到比较合适的解释与解决方案。
其中虽然有效但是感觉不太完美的是将rename()函数替换为 system("mv ".$src." ".$Dest)欢迎大虾再给指一条明路!
http://www.php.net/manual/en/function.rename.php
Changelog
Version Description
5.3.1 rename() can now rename files across drives in Windows.
5.0.0 rename() can now also be used with some URL wrappers. Refer to List of Supported Protocols/Wrappers for a listing of which wrappers support rename().
4.3.3 rename() may now be able to rename files across partitions on *nix based systems, provided the appropriate permissions are held. Warnings may be generated if the destination filesystem doesn't permit chown() or chmod() system calls to be made on files — for example, if the destination filesystem is a FAT filesystem.看看,你的目标分区是不是没有chown和chmod权限
这个我编写了PHP的测试脚本验证过,利用PHP内置的chmod()函数将对应的目录的权限设置为0777后,再执行rename(),错误依旧。chown()没有测试。
并且ls -al 察看对应路径的属性,已经被成功修改了。
应该可以确认是有chmod()的权限的。并且我一直在用root帐户测试,权限应该不会受到太大的限制吧。还有,我在原来的ubuntu 9.04的系统(P4 2.8G双核 1G DDR2 250GB HD)上搭建的系统就没有这个问题。
最近几天将系统迁移至新机器(E5400 2G DDR3 1TB HD)上的全新安装的ubuntu10.04上,就突然这样了。
刚刚查升级管理器(Update Manager)PHP相关组件有更新。
我的脚本是直接由root账户执行的。这应该不是问题所在吧。
我原来运行同样脚本的服务器主机就没有出现过这个问题。而前后两台主机都是Ubuntu的系统。PHP5.X的环境。