Конвертировать базу данных в CSV и сохранить файл в папку на сервере - PullRequest
6 голосов
/ 09 августа 2011

Я успешно экспортировал свою базу данных в csv в виде загружаемого файла. Однако теперь мне нужно вместо создания загруженного файла .csv просто сохранить его в папку с именем «csv» на сервере. Вот мой код для текущего экспорта. Мне нужна помощь в сохранении на серверную часть. CHMOD в папке (CSV) составляет 777

    $today = date('Y-m-d'); 

    $select = "SELECT * FROM goldpacks WHERE date = '$today'";

    $export = mysql_query ( $select ) or die ( "Sql error : " . mysql_error( ) );

    $fields = mysql_num_fields ( $export );

    for ( $i = 0; $i < $fields; $i++ )
    {
        $header .= mysql_field_name( $export , $i ) . "\t";
    }

    while( $row = mysql_fetch_row( $export ) )
    {
        $line = '';
        foreach( $row as $value )
        {                                            
            if ( ( !isset( $value ) ) || ( $value == "" ) )
           {
                $value = "\t";
            }
            else
            {
                $value = str_replace( '"' , '""' , $value );
                $value = '"' . $value . '"' . "\t";
            }
            $line .= $value;
        }
        $data .= trim( $line ) . "\n";
    }
    $data = str_replace( "\r" , "" , $data );

    if ( $data == "" )
    {
        $data = "\n(0) Records Found!\n";                        
    }

    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=import.csv");
    print "$header\n$data";

1 Ответ

9 голосов
/ 09 августа 2011

Все, что вам нужно добавить, это позвонить на file_put_contents(). Вы уже правильно отформатировали CSV-файл в $data, поэтому процесс записи прост:

// $filename is whatever you need the file to be called
file_put_contents("/path/to/csv/" . $filename, "$header\n$data");

Вместо разрешений 777 для папки csv, она должна принадлежать пользователю, веб-сервер которого работает с 700, или группе пользователей, принадлежащей веб-серверу, как 770.

...