Я перемещаю сайт с сервера Windows на сервер Linux под управлением PHP 5.2.15.
На сайте имеется большая форма приложения, которая использует javascript, jquery и ajax для проверки / добавления полей и json для кодирования / декодирования входных данных, а также PHP для отправки электронной почты.
Эта форма отлично работает на учетной записи Windows. Когда я перемещаю его на наш сервер Linux, все работает, за исключением того, что отправленное письмо пусто Есть ошибка PHP, которая распечатывается и отправляется с электронной почтой:
Предупреждение: неверный аргумент указан для foreach () в /home/account/public_html/application/application_email.tpl в строке 4
первые несколько строк этого файла выглядят так:
<?php
$infoArr = get_object_vars( $info );
foreach( $infoArr as $key=>$val ) {
$parts = explode( "_", $key );
$number = array_pop( $parts );
if( count( $parts ) >= 1 && is_numeric( $number ) )
{
Так что для меня ошибка говорит о том, что $ info пусто. Переменная $ info $ php создается в другом файле с именем submitApp.php. Первые несколько строк этого файла:
<?php
require_once( "emogrifier.php" );
$info = json_decode( $_REQUEST['data'] );
ob_start();
require( "application_email.tpl" );
$css = file_get_contents("application_email.css");
$html = ob_get_contents();
ob_end_clean();
Итак, что-то не происходит с функцией json_decode. Используя живые HTTP-заголовки в Firefox, я вижу, как входные данные формы передаются (через POST) в submitApp.php. Итак, я знаю, что данные туда попадают. Вот строка из LiveHTTPheaders:
POST /~account/application/submitApp.php data=%7B%22name%22%3A%22Test+Name%22%2C%22address%22%3A%22111+Test+Street%22%2C%22city%22%3A%22Testville%22%2C%22state%22%3A%22NJ%22%2C%22zip%22%3A%2212121%22%2C%22email%22%3A%22test%40test.com%22%2C%22
и т. Д.
Таким образом, создается впечатление, что json_decode не работает и поэтому не помещает содержимое $_REQUEST['data']
в переменную $info
.
Есть идеи? Я не новичок в php, но я новичок в json, ajax и в этой вещи "emogrifier".
Спасибо!