即使csv文件在目录中,它也会返回PHP:无法打开流:没有这样的文件或目录。

时间:2017-10-22 00:51:19

标签: php csv

我可以问一个愚蠢的问题吗?我已经检查了相同错误的答案,例如。 PHP - Failed to open stream : No such file or directory。和其他几个人。

然而,这一个似乎更为精确的问题。我正在使用XAMPP,我检查了csv文件的属性,并说明了位置。 C:\ XAMPP \ htdocs中 然后,我检查了http://localhost/Untitled-2.php并且它重新燃起了:

  

警告:文件(Book 1.csv 1):无法打开流:第2行的C:\ xampp \ htdocs \ Untitled-2.php中没有此类文件或目录

     

警告:在第3行的C:\ xampp \ htdocs \ Untitled-2.php中为foreach()提供的参数无效

为什么我会收到这些错误?我的代码是以下脚本:

<?php
     $read = file("Book 1.csv 1");
     foreach($read as $line){
         echo $line .",";
        }
?>

2 个答案:

答案 0 :(得分:1)

我假设您的文件名为Book 1.csv,因为它更有意义。您的代码可能有拼写错误,因为文件来源目前为Book 1.csv 1,这可能是您遇到问题的原因。

试试这个:

$read = file("Book 1.csv");

答案 1 :(得分:1)

所以,我认为你有相对和绝对路径的问题。

file("foo.bar")会尝试将文件foo.bar relative 打开到当前路径。如果您从命令行运行php脚本,它将尝试在您运行php时所在的目录中打开该文件。

因此,如果您有以下目录结构:

/foo/
   /foo/test.php
   /foo/bar.csv
/bar.txt

你正在从你的根目录运行php:

/ $ php /foo/test.php

您的文件的工作目录将是/,即使php文件本身位于/foo。所以,如果你这样做

file('bar.csv');

实际上{php}将尝试打开的内容/bar.csv并不存在。

请注意,脚本的相对工作目录可能与脚本的运行方式有很大不同。如果它从 php-fpm 模式运行,则取决于您的配置。

要测试当前的工作目录,请执行

echo getcwd();

然后您可以使用

列出工作目录的内容
$files = glob(getcwd() . DIRECTORY_SEPARATOR, GLOB_NOSORT);
var_dump($files);

或者您可以使用readdir

执行类似的操作

总而言之,我认为你应该尽量避免使用相对文件路径,因为它可以解决各种各样的问题。如果可能,请尝试使用绝对路径,例如:

file('/var/www/file.csv');