fputcsv в PHP не будет записывать в файл

Я искал, искал и выполнял обширную отладку, и на всю жизнь не могу понять, почему 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, это (как вы можете видеть в коде отладки выше) «Этот файл открыт и работает».

Любые мысли, которые могут быть у кого-то, будут очень признательны!

Большое спасибо!!!

Путешествие


person user2149399    schedule 08.03.2013    source источник
comment
Вы должны регистрировать возвращаемые значения вызова fputcsv. в случае успеха он вернет количество записанных байтов, в противном случае - логическое значение false. поскольку вы вообще не получаете кода ответа, вероятно, это логическое значение false в конце цикла, которое обычно не печатается.   -  person Marc B    schedule 08.03.2013


Ответы (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);
person DaveRandom    schedule 08.03.2013
comment
Ааааа, это было! Ты прекрасна! Большое спасибо и хороших выходных! - Путешествие - person user2149399; 08.03.2013
comment
Не принимайте ответ! Ему не нужен представитель! Он просто делает это, чтобы помочь людям! - person rdlowrey; 08.03.2013