2013-05-01 177 views
0

这里有点奇怪。php文件()返回布尔值true而不是文件内容数组

这个本地工作,但在临时服务器上运行会导致代码失败,因为file()函数返回一个true,而不是记录

代码摘录阵列:

if ($input_list = file("{$path}/input_list.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) !== false) { 
    foreach ($input_list as $row) { 
      ... etc... 
      } 
} 

该文件存在(我通过DirectoryIterator访问目录/文件),它有内容。执行脚本的用户已经读取&对文件夹和文件的写入权限。

如果我echo一个gettype($input_list)返回:bool(true)

编辑 - 我自己也尝试用了不同的标志 - FILE_IGNORE_NEW_LINES和FILE_SKIP_EMPTY_LINES

任何想法,为什么它工作本地(填充有记录的数组),但在服务器上返回true。

服务器是PHP 5.3.21 TIA PG

回答

-1

的原因,它是这样做是因为!== false。

您首先将file(..)的结果分配给$input_file,然后检查它是否不等于false。如果文件存在,这将返回true。

因此,除去!== false所以你必须:

if($input_file = file("{$path}/test.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES)) { 
    print_r($input_file); 
} else { 
    echo 'nope'; 
} 
+0

甜蜜的感谢。这就是诀窍。然而,我很困惑,因为我的初始语法在本地很好 - 唯一的区别是我在5.4.10。 – 2013-05-01 16:29:07

3

您必须使用括号:

if(($input_list = file(…)) !== false) { 

否则,你的情况会被解释成:

if($input_list = (file(…) !== FALSE)) { 
+0

感谢您的快速回复,但是这不是问题。我修改我的代码以包含括号并得到完全相同的结果 - 布尔:真。 – 2013-05-01 16:20:12

相关问题