【问题标题】:fgetcsv throwing error when calling from CLI从 CLI 调用时 fgetcsv 抛出错误
【发布时间】:2017-04-16 13:29:40
【问题描述】:

通过浏览器检查时可以正常运行我的php文件,但通过CLI运行时会引发无限循环错误:

fgetcsv() 期望参数 1 是资源,在第 30 行(同时行)给出布尔值

代码:

readCSV("feeds/data.csv");
function readCSV($csvFile) {
    $count = 0; //for counting array objects
    $storedQuotes = array();
    $handle = fopen($csvFile, 'r');
    //fgetcsv($file, 1000, ","); //remove first line

    while (($line = fgetcsv($handle, 1000, ",")) !== FALSE) {

       $quote = $line[2];
       $author = $line[1];

    //add element to $csv_arr with $quote and  $author
        $csv_arr[]=array(
                        "quote"    =>    $quote,
                        "author"    =>    $author
                    );
}

fclose($file);
}

如何让我的程序通过 php cli 运行?

【问题讨论】:

  • 检查 csv 文件的路径是否存在
  • 通过网页调用解析良好。文件在那里。
  • “通过网页调用解析良好”没有任何意义。从你的大脑中清除它并查看问题。 $handle 很可能是“假”,表示错误。文件未找到。权限问题。等等...专注于问题,您就有机会找到解决方案。

标签: php cron fgetcsv


【解决方案1】:

首先检查$handle 是否为资源(或为假)。例如:

$handle = fopen($csvFile, 'r');
if(false !=== $handle) {
  // do while{} here
}
else {
  echo "Could not open $csvFile for reading";
}

另外,在 CLI 中,您的文件路径是不同的。所以你需要更明确。如果$csvFile 位于脚本的相对路径中,最简单的方法是定义路径,例如:

__DIR__ . "feeds/data.csv"

【讨论】:

    【解决方案2】:

    您的 PHP 代码似乎没有找到该文件(因为 fopen 返回 false)。

    我认为你应该使用完整路径而不是相对路径,因为你是在 cmd 中运行它。

    你应该像下面这样设置你的路径:

    readcsv(dirname(__FILE__).'/feeds/data.csv');
    

    如果“feeds”目录与您的 PHP 文件位于同一目录中,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2017-10-11
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 2017-06-21
      • 1970-01-01
      相关资源
      最近更新 更多