Создать CSV в php из массива или объекта - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь сгенерировать файл CSV и отправить его на учетную запись FTP.

Моя проблема заключается в заполнении файла CSV.

Этот код работает хорошо, но я могу передать только строку в $ Ф.П. .Когда я пытаюсь использовать массив, файл поступает на учетную запись ftp пустым.

Я не могу понять, почему.

Кроме того, я сейчас пытаюсь передать массив только для проверки, нолучше всего для меня будет возможность использовать объект, как я могу сгенерировать этот файл?

function ftp_file_put_contents($remote_file, $file_string) {

    // FTP login details
    $ftp_server="ftp.xxx.it";
    $ftp_user_name="xxx@xx.it";
    $ftp_user_pass="xxxx";

    // Create temporary file
    $local_file = fopen('php://temp', 'r+');
    fwrite($local_file, $file_string);
    rewind($local_file);

    // FTP connection
    $ftp_conn=ftp_connect($ftp_server);

    // FTP login
    @$login_result=ftp_login($ftp_conn, $ftp_user_name, $ftp_user_pass);

    // FTP upload
    if($login_result) 
        $upload_result=ftp_fput($ftp_conn, $remote_file, $local_file, FTP_ASCII);

    // Error handling
    if(!$login_result) {
        echo('<p>FTP error: The file could not be written to the FTP server perche $login_result.</p>');
    } elseif (!$upload_result) {
        echo('<p>FTP error: The file could not be written to the FTP server perche $upload_result.</p>');
    } else {
        echo('<p>good</p>');
        echo $file_string;
    }

    // Close FTP connection
    ftp_close($ftp_conn);

    // Close file handle
    fclose($local_file); 
}

$Fname = 'invoce.csv';

$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'),
    array('123', '456', '789'),
    array('"aaa"', '"bbb"')
);

$fp = fopen($Fname, 'w');

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);


// Function call
ftp_file_put_contents($Fname, $fp);

1 Ответ

0 голосов
/ 13 декабря 2018

Этот код уже создает файл для загрузки.

$fp = fopen($Fname, 'w');

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);

Теперь вы можете напрямую загрузить этот файл ($Fname), используя ftp_put:

$upload_result = ftp_put($ftp_conn, $remote_file, $Fname, FTP_ASCII);

Все вашикод с php://temp не имеет смысла, поскольку он просто (пытается) создать еще одну копию файла - удалите ее.


Хотя я предполагаю, что вы на самом деле хотели вообще избежать создания локального файла.Поскольку ваш код, очевидно, основан на Создание и загрузка файла в PHP на FTP-сервер без локального сохранения .

Тогда вам необходимо сделать следующее:

$local_file = fopen('php://temp', 'r+');

foreach ($list as $fields) {
    fputcsv($local_file, $fields);
}

rewind($local_file);    

// ...

$upload_result = ftp_fput($ftp_conn, $remote_file, $local_file, FTP_ASCII);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...