неверные аргументы foreach в php в командной строке - PullRequest
0 голосов
/ 16 декабря 2009

Я написал скрипт на php, который читает два файла, берет все строки из одного файла и ищет их в другом файле. Это работает нормально в веб-браузере. Но когда я пытаюсь запустить его через командную строку, он говорит 'недопустимые аргументы для foreach () в строке ....' я что-то упустил?

<?php
$filename = 'search_items.txt'; 
$fp = @fopen($filename, 'r'); 
if ($fp) { 
 $array = explode(",", fread($fp, filesize($filename))); 
} 

$filename1 = 'file1.log'; 
$fp1 = @fopen($filename1, 'r'); 
if ($fp1) { 
 $array1 = explode("\n", fread($fp1, filesize($filename1))); 
} 

$num = 1;

foreach($array1 as $val1){
 foreach($array as $val){
  if(strstr($val1, $val)){
   echo 'line : '.$num.'->'.$val1.'<br>';
  }
 }
++$num;    
}    
?>

<?php





$filename = 'search_items.txt'; 
$fp = fopen($filename, 'r'); 
if ($fp) { 
 $array = explode(",", fread($fp, filesize($filename))); 
} 

$filename1 = 'file1.log'; 
$fp1 = fopen($filename1, 'r'); 
if ($fp1) { 
 $array1 = explode("\n", fread($fp1, filesize($filename1))); 
} 

$num = 1;

foreach($array1 as $val1)
{
foreach($array as $val)
{
if(strstr($val1, $val)) 
{
print_r('\n'); //2
}
}
++$num;
print_r($val1); // 1
}

Хорошо, скрипт сейчас запущен, но происходит нечто забавное. если я удаляю печать в комментарии 1 и помещаю ее в место комментария 2, то результаты, которые я получаю, являются последними, то есть только одним последним результатом. не полные поиски. Кто-нибудь может сказать мне, почему?

Ответы [ 4 ]

1 голос
/ 16 декабря 2009

Ваши fopen звонки не находят своего файла, я думаю. Во-первых, удалите '@' из '@fopen', чтобы вы могли увидеть, что он не работает. Затем сделайте это:

$filename = dirname(__FILE__).'/search_items.txt';
//...
$filename1 = dirname(__FILE__).'/file1.log';

Это сохранит расположение ваших файлов.

0 голосов
/ 16 декабря 2009

Чтобы быть в безопасности, вы должны добавить проверку правильности указателей файлов перед запуском циклов foreach или выдать несколько ошибок, если вы не можете открыть файл.

<?php


$filename = 'search_items.txt'; 
$fp = @fopen($filename, 'r'); 
if ($fp) { 
 $array = explode(",", fread($fp, filesize($filename))); 
}

$filename1 = 'file1.log'; 
$fp1 = @fopen($filename1, 'r'); 
if ($fp1) { 
 $array1 = explode("\n", fread($fp1, filesize($filename1))); 
} 

$num = 1;

if($fp && $fp1)
{
    foreach($array1 as $val1)
    {
        foreach($array as $val)
        {
            if(strstr($val1, $val)) 
            {
                echo 'line : '.$num.'->'.$val1.'<br>';
            }
        }
        ++$num;

    }
}

?>

Имейте в виду, что при запуске сценария из CLI текущим каталогом является каталог, из которого был запущен сценарий. При запуске через Apache текущий каталог является каталогом скрипта. Это укусило меня пару раз.

0 голосов
/ 16 декабря 2009

Может быть переменные пусты или не существуют?

$array = $array1 = array();

//...

foreach((array)$array1 as $val1)
{
    foreach((array)$array as $val)
    {
        if(strstr($val1, $val)) 
        {
            echo 'line : '.$num.'->'.$val1.'<br>';
        }
    }
    $num++;
}
0 голосов
/ 16 декабря 2009

Возможно, ваши пути к файлам отключены, поэтому $ array и $ array1 никогда не создаются. Относительные пути будут от места, где вы вызываете сценарий, а не от местоположения сценария.

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