6

我正在使用 cURL 请求从 FTP 服务器下载 CSV 文件。

我已将文件下载到我的 webroot 文件夹中(在我给定的路径中)。

但是当我试图从文件中读取 CSV 数据时,它没有显示任何内容。 $leadDir是我下载文件的路径。

if ($fp = fopen($leadDir, "r")) {
    echo $fp;
    echo "come after fopen";
    while ($CSVData = fgetcsv($fp)) {
        echo "</br>";
        echo "come after fgetcsv";
    }
}

它不会进入while循环内部。

我还检查了文件权限,我给了它 777 权限。

它哪里出错了?

4

4 回答 4

2

代码应该没问题,所以我最好的答案是路径不正确,尝试类似

$cwd = getcwd();
$leadDir = $cwd.'/relativePathToFile';

if(file_exists($leadDir)){
    if (($fp = fopen($leadDir, "r"))) {
        echo $fp;
        echo "come after fopen";
        while ($CSVData = fgetcsv($fp)) {
            echo "</br>";echo "come after fgetcsv";
        } 
    }
 }
于 2012-08-13T07:54:12.663 回答
1

您的代码看起来应该可以工作。这是我将使用的代码:

<?php
if($handle = fopen('test.csv', 'r')) {
    $data = fgetcsv($handle);
    if($data) {
        echo '<pre>';
        var_dump($data);
        echo '</pre>';
    }
}
?>

尝试执行此代码:

var_dump(file_exists($leadDir));

如果文件存在,它将输出

bool(true)

否则会输出

bool(false)

另外,$leadDir目录还是文件

于 2012-08-13T08:16:25.930 回答
1

如果提供了无效句柄,fgetcsv() 将返回 NULL,或者在其他错误(包括文件结尾)时返回 FALSE。

尝试:

if (($fp = fopen($leadDir, "r")) !== FALSE) {
    echo $fp;
    echo "come after fopen";
    while (($CSVData = fgetcsv($fp,1000,',')) !== FALSE) {
        echo "</br>";
        echo "come after fgetcsv";
    }
}

如果仍然没有进入 while 循环,请尝试检查 CSV 文件的结尾。

注意:如果 PHP 在读取 Macintosh 计算机上或由 Macintosh 计算机创建的文件时无法正确识别行尾,启用 auto_detect_line_endings 运行时配置选项可能有助于解决问题。(来源PHP.net

于 2012-08-13T08:42:58.640 回答
0

检查目标目录的所有者。尝试将权限授予www-data用户。

您可以通过使用下载文件的chown 功能以编程方式执行此操作。

这是语法。

bool chown ( string $filename , mixed $user )
于 2012-08-13T12:04:41.143 回答