【问题标题】:fputcsv in PHP will not write to filePHP中的fputcsv不会写入文件
【发布时间】:2013-03-08 18:22:33
【问题描述】:

我已经搜索和搜索并进行了广泛的调试,但我一生都无法弄清楚为什么 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 文件中出现的所有内容都是(如您在上面的调试代码中所见)“此文件已打开且正在运行。”

任何人的想法都将不胜感激!

非常感谢!!!

旅行

【问题讨论】:

  • 您应该记录 fputcsv 调用的返回值。如果成功,它将返回写入的字节数,否则返回布尔值。由于您根本没有收到响应代码,因此在循环结束时它可能是一个布尔值 false,这通常是不可打印的。

标签: php fputcsv


【解决方案1】:

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

【讨论】:

  • 啊啊啊,就是这样!你非常美!非常感谢,周末愉快! - 旅行
  • 不接受答案!他不需要代表!他这样做只是为了帮助人们!
猜你喜欢
  • 2012-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多