PHP中的fputcsv不会写入文件

时间:2013-03-08 18:22:34

标签: php fputcsv

我已经搜索并搜索并进行了大量的调试,因为我的生活无法弄清楚为什么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文件中出现的所有内容(如上面的调试代码中所示)“此文件已打开并正常工作。”

任何人都可能有任何想法,将不胜感激!

非常感谢!!!

旅行

1 个答案:

答案 0 :(得分:7)

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);