PHP сериализуемый работает на локальном хосте, но не на веб-сервере - PullRequest
3 голосов
/ 19 декабря 2011

Я работаю над веб-страницей, где у меня есть некоторые данные, визуализированные в HTML-таблицах.Я хочу, чтобы пользователь мог извлекать данные в виде документа Excel и для этой цели использую PHPExcel.Данные хранятся в массиве массивов, массиве (массив первой строки (первый столбец, ..., последний столбец), ..., массив последней строки (первый столбец, ..., последний столбец)).Таким образом, чтобы передать данные в 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 оказался в порядке.

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

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

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

unserialize (htmlspecialchars_decode ($ serialized_func));

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

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

0 голосов
/ 19 декабря 2011

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

...