Нужна диагностика PHP-скрипта для небольшого фрагмента кода - PullRequest
0 голосов
/ 14 марта 2009

Может кто-нибудь сказать мне, что я на самом деле делаю неправильно? Я схожу с ума, следующий код прекрасно работает на localhost / WIN, и когда я пытаюсь сделать это на webhost / linux, он выдает предупреждение:

$lines = file('english.php');
foreach($lines as $line) {
    $matches=array();
    if (preg_match('/DEFINE\(\'(.*?)\',\s*\'(.*)\'\);/i', $line, $matches)) {
        $keys[] = $matches[1];
        $values[] = $matches[2];
    }
}
$lang = array_combine($keys, $values);

Когда я тестирую на веб-хосте:

Warning: array_combine() expects parameter 1 to be array, null given in /home/xx/public_html/xx on line 616

Но на локальном сервере (windows xp) все работает отлично. Я не знаю, что я делаю не так, пожалуйста, помогите мне разрешить этот кошмар: (

Спасибо.

Ответы [ 3 ]

2 голосов
/ 14 марта 2009

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

// Make sure this file is local to the system the script is running on.
// If it's a "url://" path, you can run into url_fopen problems.
$lines = file('english.php');

// No need to reinitialize each time.
$matches = array();

$lang = array();
foreach($lines as $line) {
    if (preg_match('/DEFINE\(\'([^\']*)\',\s*\'([^\\\\\']*(?:\\.[^\\\\\']*)*)\'\);/i', $line, $matches)) {
        $lang[$matches[1]] = $matches[2];
    }
}

(Я также изменил ваше регулярное выражение для обработки одинарных кавычек.)

0 голосов
/ 14 марта 2009

Кажется, ваша переменная $ keys равна нулю, потому что вы ее нигде не инициализируете.

Мне кажется, что файл english.php на вашем сервере пуст (или не существует), поэтому при попытке прочитать его ничего не сохраняется в переменной $ keys;

Попробуйте добавить начальное значение для этой переменной перед оператором foreach:

$lines = file('english.php');
$keys = array();
foreach($lines as $line) {
$matches=array();
    if (preg_match('/DEFINE\(\'(.*?)\',\s*\'(.*)\'\);/i', $line, $matches)) {
        $keys[] = $matches[1];
        $values[] = $matches[2];
    }
}
$lang = array_combine($keys, $values);

Таким образом, даже если файл не существует или является пустым, вы охватываете все возможные пути.

Вы всегда должны кодировать, как будто все может пойти не так, а не наоборот :)

0 голосов
/ 14 марта 2009

Версии php одинаковы?

И вы уверены, что передали все свои файлы на хостинг?

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