对应的代码:
$Handle = fopen($PackName, 'rb') or die("Can not open file: $PackName.\n");错误提示如下:
fopen(略): failed to open stream: No such file or directory in 略.php on line 86查看对应的文件路径的权限:
ls -al <文件路径>
-rwxr-xr-x 1 root root 48 2011-01-28 00:38 <文件路径>应该没有问题。出错的文件路径是刚刚新创建(拷贝/释放)的。随后再用相同的脚本操作该文件,就没有问题。我怀疑是不是因为文件的信息没有及时更新到PHP所用的某缓存中,才导致无法访问这个问题应该怎么解决?急盼大虾指点!!!

解决方案 »

  1.   

    为了进一步测试,在出错的PHP语句前增加了如下判断代码:if(file_exists($PackName))
    {
    echo("file: $PackName exists\n");
    }
    else
    {
    echo("Can not open file: $PackName.\n");
    return 0;
    }
    $Handle = fopen($PackName, 'rb') or die("Can not open file: $PackName.\n");发现函数file_exists() 可以访问对应的文件。而随后的fopen()却访问失败。
      

  2.   

    参数有'rb'吗?手册中没有找到fopen() 中 mode 的可能值列表 mode 说明 
    'r' 只读方式打开,将文件指针指向文件头。  
    'r+' 读写方式打开,将文件指针指向文件头。  
    'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。  
    'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。  
    'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。  
    'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。  
    'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。  
    'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。 
      

  3.   

    可以试一下:clearstatcache
    (PHP 4, PHP 5)clearstatcache — 清除文件状态缓存说明
    void clearstatcache ( void )
    当使用 stat(),lstat() 或者任何列在受影响函数表(见下面)中的函数时,PHP 将缓存这些函数的返回信息以提供更快的性能。然而在某些情况下,你可能想清除被缓存的信息。例如如果在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存。这种情况下,可以用 clearstatcache() 函数来清除被 PHP 缓存的该文件信息。 必须注意的是,对于不存在的文件,PHP 并不会缓存其信息。所以如果调用 file_exists() 来检查不存在的文件,在该文件没有被创建之前,它都会返回 FALSE。如果该文件被创建了,就算以后被删除,它都会返回 TRUE Note: 本函数缓存特定文件名的信息,因此只在对同一个文件名进行多次操作并且需要该文件信息不被缓存时才需要调用 clearstatcache()。 
      

  4.   

    再仔细看看下面两个函数的用法吧。
    fopen()
    file_exists()
      

  5.   

    如果真是 路径错误 , file_exists()应该也会找不到对应的文件啊。
      

  6.   

    不应该去掉参数 'b'
    刚刚查了查PHP的文档,有如下的说明:Note:For portability, it is strongly recommended that you always use the 'b' flag when opening files with fopen().链接如下:
    http://php.net/manual/en/function.fopen.php
      

  7.   

    现在又有一个小小的发现。调用fopen()出错的文件都是新创建的文件,例如通过调用解压缩软件7zip unrar unzip等程序解压缩后的文件。
    原来的确发现过通过7zip解压的文件的权限都被默认设置为-rwx------。即其他用户都无法访问,但是我已经在随后的代码里面加入了更改权限的指令chmod(....."a+rwx".......)
    应该就不会出现问题了。但是现实很残酷。期待大虾指点!
      

  8.   

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