6

FTP サーバーから CSV ファイルをダウンロードするために cURL 要求を使用しています。

ファイルを 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 の end of file を確認してみてください。

注: Macintosh コンピューター上または Macintosh コンピューターで作成されたファイルを読み取るときに、PHP が行末を正しく認識しない場合は、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 に答える