2009-03-14 3 views
0

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

$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) работает отлично. Я не знаю, что я делаю неправильно, пожалуйста, помогите мне решить этот кошмар :(

Спасибо.

ответ

2

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

// 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

Ты босс! Проблема была в самом файле ... и я исправил свой код в соответствии с вашими инструкциями –

0

являются PHP версии же?

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

+0

array_combine() доступна только в PHP 5. Если сервер был PHP 4, вместо «array_combin» будет отображаться ошибка «function not exist» e() ожидает, что параметр 1 является массивом « – Seb

+0

Код является копией клона. Версия php - это 5.2.8 на обоих. .. –

0

кажется переменная $ ключи пустой, потому что вы не инициализирует его в любом месте.

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

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

$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

Спасибо. Файл существует и содержит 89 строк данных, также когда я тестирую на localhost, результаты печатаются в браузере. Вот почему я смущен. потому что он работает без проблем на localhost, но не на веб-хосте .. :) –

+0

Обновление: я добавил $ keys = array(); и $ values ​​= array(); ниже $ lines, и он по-прежнему отлично работает на localhost (он печатает результаты), но на веб-хосте он изменил ошибку: Warning: array_combine() [function.array-comb]: Оба параметра должны иметь как минимум 1 элемент в/home/... –

+0

Говорят, что это пустые массивы, но это не так, файл содержит 89 строк, а localhost может читать их все .. confused :) –

Смежные вопросы