命令行中php中的foreach参数无效

命令行中php中的foreach参数无效,php,Php,我用php编写了一个脚本,它读取两个文件,并从一个文件中获取所有字符串,然后在另一个文件中搜索它们。这在web浏览器中运行良好。但当我试图通过命令行运行它时,它说 '在第…行为foreach()提供的参数无效' 我遗漏了什么吗 <?php $filename = 'search_items.txt'; $fp = @fopen($filename, 'r'); if ($fp) { $array = explode(",", fread($fp, filesize($filenam

我用php编写了一个脚本,它读取两个文件,并从一个文件中获取所有字符串,然后在另一个文件中搜索它们。这在web浏览器中运行良好。但当我试图通过命令行运行它时,它说 '在第…行为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;    
}    
?>



我想你的
fopen
调用找不到他们的文件。首先,从'@fopen'中删除'@',这样您就可以看到它失败了。然后,执行以下操作:

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

这将使您的文件位置保持笔直。

可能您的文件路径已关闭,因此永远不会创建$array和$array1。相对路径将来自调用脚本的位置,而不是脚本的位置。

可能变量为空或不存在

$array = $array1 = array();

//...

foreach((array)$array1 as $val1)
{
    foreach((array)$array as $val)
    {
        if(strstr($val1, $val)) 
        {
            echo 'line : '.$num.'->'.$val1.'<br>';
        }
    }
    $num++;
}
$array=$array1=array();
//...
foreach((数组)$array1作为$val1)
{
foreach((数组)$array作为$val)
{
if(strstr($val1,$val))
{
回显“行:'.$num.->'.$val1.
'; } } $num++; }
为了安全起见,您应该在运行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运行时,当前目录就是脚本的目录。有几次我被它咬了。

search\u items.txt位于共享驱动器中。php文件位于htdocs文件夹中。我猜dirname(FILE)在当前目录中搜索该文件?您需要指定完整路径,但您必须这样做
dirname
非常好,当目标文件相对于脚本文件定位时,这是我的猜测。我将文件放在与脚本相同的路径中,它们现在工作正常。相关:
<?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;

    }
}

?>