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

解决方案 »

  1.   


    就是说如果源地址与目的地址不在相同的分区,操作就会失败。
    比如从/tmp 拷贝至/home/
    /tmp 属于分区/
    /home/是另外一个分区。明白了吧。
      

  2.   

    可以的吧,估计是你目录没写好。PHP手册
    例子 1. rename() 例子 <?php
    rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
    ?>  
      

  3.   

    注: 在 PHP 4.3.3 之前,rename() 不能在基于 *nix 的系统中跨磁盘分区重命名文件。
      

  4.   

    如果不行得话你可以换个方法fwrite fread
    rename 就是读文件,写成一个新文件,再删除原有的文件
    copy 就是读文件,写成一个新文件
      

  5.   


    源路径 没有问题。存在并且权限正常(777都试过了)
    目标文件的文件夹(例:/home/user/login/docs/)存在并且权限正常。
    但是目标文件不存在。原来这样用都没有问题。但是现在就不行了。
    难道我非得提前建好一个空文件?一会儿测试一下
      

  6.   

    在PHP 4.3.3之前rename()与copy() 在linux系统下是支持跨分区操作的。
      

  7.   


    少打了一个字, 在PHP 4.3.3之前在linux系统下是支持跨分区操作的
      

  8.   

    收到!
    我的是PHP5。不是版本的问题吧。
      

  9.   


    光是777还不行,这两个操作还需要修改用户组,你ll命令看一下 所有者是不是 root root应该要改为 www www使用以下命令可以进行修改:chown -R www.www 你的目录
      

  10.   

    是这样么?
    因为执行脚本的用户权限就是root,而不是apache权限的用户执行的脚本,所以感觉不应该是这个问题吧?等周一验证一下。
    先谢谢LS的指点了!
      

  11.   


    用PHP内置函数 chown() 竟然无法找到默认的用户“www”
    崩溃。
    不过应该不是这个问题。
    因为脚本本身就是Root权限执行的。
      

  12.   

    现在通过额外指定了一个同分区内的临时目录的方法,基本上杜绝了错误提示。看来LS所说的PHP不支持跨分区操作的说法的确是真的,但是不是说只是PHP早期版本有这个限制么?怎么现在PHP5.X又出现了?
    我原来运行同样脚本的服务器主机就没有出现过这个问题。而前后两台主机都是Ubuntu的系统。PHP5.X的环境。
      

  13.   

    确认后可以把这个bug提交到php bugs  ( 附上你的机器/操作系统/php版本等信息)