2015-08-10 5 views
0

Я немного застрял в следующем коде, который правильно открывает файл csv (list.csv) и определяет, есть ли совпадение в одной из строк, которая соответствует тому, что в переменной $ match. Чтобы уточнить, скрипт работает правильно. Когда я звоню скрипт через браузер, не существует никаких ошибок, показанные (я их включен), но когда я запускаю его в CLI это получить годов в цикл со следующими ошибками:Проблема с вызовом fgetcsv в CLI, но не apache2

Warning: in_array() expects parameter 2 to be array, null given in /var/www/html/script.php on line 169 
Exclusion not found<br> 
Warning: fgetcsv() expects parameter 1 to be resource, boolean given in /var/www/html/script.php on line 165 

и просто повторяется .. .

линия 169 является if(in_array($match ,$line))

линия 165 является while (($line = fgetcsv($file)) !== FALSE) {

if ($check_list == "1") { 
    $file = fopen('list.csv', 'r'); 
    while (($line = fgetcsv($file)) !== FALSE) { 
    print_r($line); 

    if(in_array($match ,$line)) 
     { 
     echo "match found"; 
     $name = $line[0]; 
     $address = $line[1]; 
     $phone = $line[2]; 
     echo "name : " . $name; 
     echo "address : " . $address; 
     echo "phone : " . $phone; 
     } 
    else { 
     echo "Not found in file."; 
     } 

} 
fclose($file); 
} 

Я немного застрял, почему он ведет себя таким образом, через CLI, но не через браузер (что я вижу).

Заранее спасибо.

+0

Может быть вызван путем к файлу или правами доступа к файлам. В браузере он производит какой-либо вывод? – frz3993

+0

Привет, извините, я забыл добавить, файл существует и читается правильно, скрипт (кажется) работает нормально. – omega1

+0

Вы имеете в виду, что он продолжал работать даже после того, как csv достигло EOF? – frz3993

ответ

1

Существует множество отличий в среде при запуске скрипта через веб-браузер по сравнению с кли.

Когда вы используете относительный путь в своем скрипте и запускаете скрипт через cli, php будет считать, что файл, который вы ищете, относится к вашему текущему рабочему каталогу. Например, если текущий рабочий каталог

/home/ 

и ваш скрипт и файл находится в каталоге сценариев

/var/www/html/script.php 
/var/www/html/list.csv 

При запуске

php -f /var/www/html/script.php 

или

php -f ..var/www/html/script.php 

PHP wi ll искать файл относительно вашего рабочего каталога как

/home/list.csv 

который не существует. Я впервые столкнулся с такой проблемой, когда я пытался запустить PHP-скрипты из crontab, что вызвало разрыв всех относительных путей. Таким образом, это либо изменить свой рабочий каталог /var/www/html/ или просто использовать абсолютный путь, в вашем случае

$file = fopen('/var/www/html/list.csv', 'r');