PHP中的fputcsv无法写入文件

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文件中出现的只有(正如您在上面的调试代码中看到的)“此文件已打开并正在工作”。

非常感谢任何人可能有的想法!

非常感谢!!!

Trip


你应该记录fputcsv调用的返回值。如果成功,它将返回写入的字节数,否则返回布尔值false。由于你根本没有得到任何响应代码,所以循环结束时可能是一个不可打印的布尔值false。 - Marc B
1个回答

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

啊哈,就是这样!你太棒了!非常感谢,祝你周末愉快!- Trip - user2149399
3
不要接受那个答案!他不需要声望值!他只是出于帮助别人的目的而这样做! - user895378

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接