Сериализуемый PHP, работающий на локальном хосте, но не на веб-сервере

Я работаю над веб-страницей, где у меня есть некоторые данные, визуализированные в таблицах html. Я хочу, чтобы пользователь мог получать данные в виде документа Excel, и для этой цели я использую PHPExcel. Данные хранятся в массиве массивов, array (первая строка массива (первый столбец, ..., последний столбец), ..., последняя строка массива (первый столбец, ..., последний столбец)). Итак, чтобы передать данные в datatoexcel.php, где создается файл Excel, я сериализую массив и отправляю его с помощью POST.

$functiondata = serialize($func[1]);
echo '<form action="datatoexcel.php" name="dataform" method="post">'.
 '<input type=hidden name="functiondata"  value="'.htmlspecialchars($functiondata).'">'.
 '<input type="radio" name="format" value="xls" checked>xls'.
 '<input type="radio" name="format" value="xlsx">xlsx'.
 '</form>';
echo "<a href=\"#\" onclick=\"document['dataform'].submit()\">Export table data</a>";

Затем данные извлекаются из datatoexcel.php с помощью:

$serialized_func = $_POST['functiondata'];
$funcdata = unserialize($serialized_func);

Это отлично работает на локальном хосте, но когда я запускаю его на веб-сервере, $ funcdata, похоже, не имеет никаких данных. Localhost работает под управлением Windows 7 с Apache2 и PHP 5.2.17, а веб-сервер работает под управлением Linux RedHat 5.2 с Apache2 и PHP 5.2.6. PHPExcel работает на веб-сервере, я попытался создать жестко запрограммированный массив в datatoexcel.php, и документ Excel оказался в порядке.


person Nait    schedule 19.12.2011    source источник
comment
$ func [1] возвращает то, что ожидалось? Какие-то ошибки отображаются? Если ошибки не отображаются, уверены ли вы, что error_reporting равен E_ALL и не используется @ (оператор подавления ошибок)?   -  person Sejanus    schedule 19.12.2011


Ответы (2)


Вы тестируете его с точно такими же входными данными? Также на вашем локальном или удаленном сервере включена функция magic_quotes? Это также может повлиять на ваши входные данные.

Я думаю, это может быть связано с использованием htmlspecialchars (). Если htmlspecialchars () преобразует любой из символов из ввода, вы должны использовать htmlspecialchars_decode ($ serialized_func) перед его десериализацией:

десериализовать (htmlspecialchars_decode ($ serialized_func));

Наконец, не забудьте установить error_reporting (E_ALL);

в начале вашего скрипта вы можете уловить некоторые предупреждения таким образом.

person Dmitri Snytkine    schedule 19.12.2011
comment
Я думаю, что тестировал с теми же входными данными, хотя и не уверен на 100%. Не уверен насчет magic_quotes, но проверю. Спасибо за советы. - person Nait; 20.12.2011

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

person Marc Morera Merino    schedule 19.12.2011
comment
Спасибо за совет, обязательно попробую, когда вернусь к работе. - person Nait; 20.12.2011