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