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

to 的第二个参数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 回答