8

私は検索して検索し、大規模なデバッグを行ってきましたが、私の人生では、fputcsvが機能しない理由を理解できません。

.csv ファイルを正常に開いて書き込むことができます。

私のデバッグは、配列が適切にロードされ、foreach ループが正しく機能していることを証明しています。ただし、fputcsv 関数は何も書き込めません。URL などの問題を引き起こす可能性のあるすべての文字列を削除しましたが、それでも書き込みません。

この環境にアクセスできるのは私だけなので、ファイル ロックの競合ではないことはわかっています。ファイルを作成して書き込むことができるので、権限の問題ではないことがわかります。また、foreach ループからデバッグ出力が得られるので、配列やループの問題ではないことがわかります。

以下にコードとデバッグログを提供します...

$posts_meta = array(
    'twitter_title'       => $this_title,
    'twitter_brandtag'    => $this_brandtag,
    'twitter_hashtags'    => $this_hashtags,
    'twitter_iterations'  => $this_iteration,
    'twitter_timing'      => $this_timing,
    'twitter_time'        => $this_time,
    'twitter_id'          => $post_id,
 );

// Debuging
file_put_contents("/blog/debug.txt", "About to write CSV file.\n", FILE_APPEND);
file_put_contents("/blog/debug.txt", print_r($posts_meta, true)."\n", FILE_APPEND);

$myfile = fopen('/blog/pdm_twitter_ouptut.csv', 'a+');

// More debugin
file_put_contents("/blog/debug.txt", "myfile handle = ".$myfile."\n", FILE_APPEND);
fwrite($myfile, "This file is open and working.\r\n");

foreach ($posts_meta as $fields){
    $fresponse = fputcsv($myfile, $fields);

    // A little more debugging...
    file_put_contents("/blog/debug.txt", $fields."\n", FILE_APPEND);
}

fclose($myfile);

// And more debugging
file_put_contents("/blog/debug.txt", "fputcsv response = ".$fresponse."\n", FILE_APPEND);
file_put_contents("/blog/debug.txt", "Just closed CSV file.", FILE_APPEND);

そして、これが結果のデバッグログです...

About to write CSV file.
Array
(
    [twitter_title] => World Stocks Up As US Jobs, China Exports Improve
    [twitter_brandtag] => - FP test 9
    [twitter_hashtags] => #Economy #Markets #Business #Investing #Stocks
    [twitter_iterations] => 12
    [twitter_timing] => 240
    [twitter_time] => 2013-03-08 07:55:24
    [twitter_id] => 11051
)

myfile handle = Resource id #548

// Print-out of $fields here...
World Stocks Up As US Jobs, China Exports Improve
- FP test 9
#Economy #Markets #Business #Investing #Stocks
12
240
2013-03-08 07:55:24
11051

fputcsv response =      // Hm!? I wonder why no response code?
Just closed CSV file.

.csv ファイルに表示されるのは (上記のデバッグ コードでわかるように) 「このファイルは開いていて、機能しています」ということだけです。

どなたでもご意見いただければ幸いです。

本当にありがとう!!!

旅行

4

1 に答える 1

11

の2番目の引数fputcsv()は配列である必要がありますが、文字列の配列をループしてそれぞれを個別に書き込むため、文字列を渡します。

私はあなたがこれが欲しいだけだと思います:

$myfile = fopen('/blog/pdm_twitter_ouptut.csv', 'a+');
fputcsv($myfile, $posts_meta);

連想配列を使用しているために列ヘッダーも記述したい場合は、次のようなロジックが必要になる可能性があります。

$filePath = '/blog/pdm_twitter_ouptut.csv';

$exists = file_exists($filePath) && filesize($filePath) > 0;

$myfile = fopen($filePath, 'a+');

if (!$exists) {
    fputcsv($myfile, array_keys($posts_meta));
}

fputcsv($myfile, $posts_meta);
于 2013-03-08T18:27:11.637 に答える