Ошибка генерации файла CSV

Я использую плагин для клиента (который я модифицировал до некоторой степени), который создает и поддерживает базу данных членов организации (используя для этого новую таблицу wp).

Есть хорошая функция, которая делает импорт и вставку csv, которая отлично работает. Существует также функция загрузки содержимого этой таблицы в виде csv, которая отлично работает в моей локальной системе, но не работает при работе с сервером. Я, честно говоря, в недоумении, почему.

Файл php, содержащий логику, просто связан с. Файл:

<?php //include some files include('../../../wp-blog-header.php'); //DIAG: phpinfo(); function fputcsv4($fh, $arr) { $csv = ""; while (list($key, $val) = each($arr)) { $val = str_replace('"', '""', $val); $csv .= '"'.$val.'",'; } $csv = substr($csv, 0, -1); $csv .= "\n"; if (!@fwrite($fh, $csv)) return FALSE; } //get member info and column data $table_name = $wpdb->prefix . "member_db"; $year = date ('Y'); $members = $wpdb->get_results("SELECT * FROM ".$table_name, ARRAY_A); $columns = $wpdb->get_results("SHOW COLUMNS FROM ".$table_name, ARRAY_A); //DIAG: echo 'SQL: '.$sql.', RESULT: '.$result.'<br>'; //output headers header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"members.csv\""); //open output stream $output = fopen("php://output",'w'); //output column headings $data[0] = "ID"; $i = 1; foreach ($columns as $column){ //DIAG: echo '<pre>'; print_r($column); echo '</pre>'; $field_name = ''; $words = explode("_", $column['Field']); foreach ($words as $word) $field_name .= $word.' '; if ( $column['Field'] != 'id' && $column['Field'] != 'date_updated' ) { $data[$i] = ucwords($field_name); $i++; } } $data[$i] = "Date Updated"; fputcsv4($output, $data); //output data foreach ($members as $member){ //DIAG: echo '<pre>'; print_r($member); echo '</pre>'; $data[0] = $member['id']; $i = 1; foreach ($columns as $column){ //DIAG: echo '<pre>'; print_r($column); echo '</pre>'; if ( $column['Field'] != 'id' && $column['Field'] != 'date_updated' ) { $data[$i] = $member[$column['Field']]; $i++; } } $data[$i] = $member['date_updated']; //echo '<pre>'; print_r($data); echo '</pre>'; fputcsv4($output, $data); } fclose($output); ?> 

Итак, у нас есть процедура, в которой выполняется запрос, $output устанавливается с помощью fopen , добавляется в операторы foreach и, наконец, fclose d.

Ошибка, которую я получаю (с сервера),

 Error 6 (net::ERR_FILE_NOT_FOUND): The file or directory could not be found. 

Но это, очевидно, находит, его просто не удается. Если я phpinfo() (PHP Версии 5.2.17) в верхней части файла, я определенно получаю ответ – особенно Cannot modify header information (потому что phpinfo() уже сгенерировал заголовок). Однако все ожидаемые данные печатаются на странице, так что, по крайней мере, она работает правильно.

Я предполагаю, что есть что-то, препятствующее функциям fopen, fclose работать должным образом, но у меня недостаточно опыта, чтобы точно определить, в чем проблема.

Я еще раз замечу, что это работает точно так, как ожидалось, в моей тестовой среде (localhost / XAMPP, netbeans).

Любые мысли были бы наиболее оценены.

Solutions Collecting From Web of "Ошибка генерации файла CSV"

Попробуй это:

 <?php header("Content-type: application/csv"); header('Content-Disposition: inline; filename="export.csv"'); // change this filename include ('../../../wp-load.php'); // may need to change number of "../" depending upon location global $wpdb; $rows = $wpdb->get_results ("SELECT * FROM {$wpdb->prefix}table_name"); // change the table name echo strtolower(implode(',', array_keys((array)$rows[0]))) . "\r\n"; // fixes an Excel bug if the first column is "ID" foreach($rows as $row) echo '"' . implode ('","', array_values((array)$row)) . '"' . "\r\n"; ?> 

Это автоматически преобразует все содержимое таблицы в формате CSV и потоит загрузку прямо в браузере, создавая диалоговое окно с предложением пользователю сохранить файл.