即使csv文件在目录中,它也会返回PHP:failed to open stream:No这样的文件或目录。

即使csv文件在目录中,它也会返回PHP:failed to open stream:No这样的文件或目录。,php,csv,Php,Csv,我可以问一个愚蠢的问题吗?我已经检查了相同错误的答案,例如。还有其他几个 然而,这个问题似乎更为棘手。我正在使用XAMPP,我已经检查了csv文件的属性,它显示了位置。C:\xampp\htdocs 然后,我检查了一下,发现: 警告:文件(Book 1.csv 1):无法打开流:第2行的C:\xampp\htdocs\Untitled-2.php中没有此类文件或目录 警告:为第3行C:\xampp\htdocs\Untitled-2.php中的foreach()提供的参数无效 为什么我会出现这些

我可以问一个愚蠢的问题吗?我已经检查了相同错误的答案,例如。还有其他几个

然而,这个问题似乎更为棘手。我正在使用XAMPP,我已经检查了csv文件的属性,它显示了位置。C:\xampp\htdocs 然后,我检查了一下,发现:

警告:文件(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 .",";
        }
?>

我假设您的文件名是
Book1.csv
,因为它更有意义。您的代码可能有输入错误,因为文件源当前是
Book 1.csv 1
,这可能是您出现问题的原因

试试这个:

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

我假设您的文件名是
Book 1.csv
,因为它更有意义。您的代码可能有输入错误,因为文件源当前是
Book 1.csv 1
,这可能是您出现问题的原因

试试这个:

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

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

文件(“foo.bar”)
将尝试打开与当前路径相对的文件
foo.bar
。如果您从命令行运行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);
或者你也可以做类似的事情

总之,我认为您应该尽量避免使用相对文件路径,因为它可能会引发各种问题。如果可能,尝试使用绝对路径,例如:

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

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

文件(“foo.bar”)
将尝试打开与当前路径相对的文件
foo.bar
。如果您从命令行运行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);
或者你也可以做类似的事情

总之,我认为您应该尽量避免使用相对文件路径,因为它可能会引发各种问题。如果可能,尝试使用绝对路径,例如:

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

您所在的目录是什么?该扩展名实际上是
.csv 1
?excel也不会打开它。根据所使用的操作系统,这个空间可能是个问题。@Fred-ii谢谢你的建议。我会更小心的。什么目录告诉你,你在?那个扩展名真的是
.csv1
?excel也不会打开它。根据所使用的操作系统,这个空间可能是个问题。@Fred-ii谢谢你的建议。我会更加小心的,为什么会被否决?少于50名代表无法向其他人的帖子添加评论。为什么被否决?少于50名代表无法向其他人的帖子添加评论。谢谢。非常痛苦!现在我正在执行echo getcwd()。它说C:\xampp\htdocs然后,$files=glob(getcwd()。目录分隔符,glob\u NOSORT),它返回var\u dump($files);数组(1){[0]=>string(16)“C:\xampp\htdocs\”}我正试图从您的答案中找出它是什么。谢谢。非常痛苦!现在我正在执行echo getcwd()。它说C:\xampp\htdocs然后,$files=glob(getcwd()。目录分隔符,glob\u NOSORT),它返回var\u dump($files);数组(1){[0]=>string(16)“C:\xampp\htdocs\”}我试图从您的答案中找出它是什么。