Передача огромного массива в форме PHP POST для создания файла CSV на основе этого массива - PullRequest
0 голосов
/ 25 января 2019

У меня довольно большой массив PHP: скажем, 2000 строк и 50 столбцов, которые содержат строки.

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

<input name='csvarray' type='text' hidden value='<?php echo (serialize($csvArray)); ?>'>

с формой, которую я вызываю php-скрипт через POST, где я десериализирую массив и создаю файл .csv.

Проблема в том, что с большими массивами я работаю в какой-то проблеме с Сервером, потому что входное значение (сериализованный массив строк) становится больше, чем 1.000.000 символов, и страница падает.

Есть ли какой-нибудь более элегантный способ создания CSV-файла при нажатии кнопки?

Спасибо за любые отзывы!

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Я думаю, вы смотрите на это неправильно. У вас уже есть этот массив на сервере, так почему вам нужно отправить его клиенту только для того, чтобы отправить его обратно на сервер? Вместо этого я предлагаю вам сохранить это в сеансе и использовать свой скрытый ввод, чтобы указать, что массив фактически находится в сеансе, что-то вроде этого:

<?php
session_start();
$_SESSION['csvarray'] = $csvArray;
?>

<input name='csvarray' type='text' hidden value='1'>

Тогда при обработке формы у вас будет что-то вроде этого:

session_start();
if (isset($_POST['csvarray'] && $_POST['csvarray'] == 1 && isset($_SESSION['csvarray'])) {
    $csvArray = $_SESSION['csvarray'];
}
0 голосов
/ 25 января 2019

Предполагая, что ваш массив является двумерным массивом ...

$array = array(/* Whatever your array is */);
$csv = "";
foreach($array as $row) {
    foreach($row as $col) {
        $csv .= $col . ",";
    }
    $csv .= "\n";
}

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

Редактировать: если ваш массив содержит запятые, вы можете использовать pre_replace()

        $csv .= preg_replace(",","\\,", $col) . ",";

Edit2: кто-то сообщил мне, что есть функция с именем fputcsv , которая делает весь мой код бесполезным. Однако, глядя на это, он требует дескриптор файла, поэтому, если просто хотите получить переменную с CSV, мой код может быть проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...