Php 定义文件位置数组,解析和替换。其中';这是我的错误吗?

Php 定义文件位置数组,解析和替换。其中';这是我的错误吗?,php,arrays,replace,Php,Arrays,Replace,我试图用文件URL列表定义一个数组,然后对每个文件进行解析,如果找到预定义字符串,则替换该字符串。由于某些原因,我所拥有的不起作用,我不确定什么是不正确的: <?php $htF = array('/home/folder/file.extension', '/home/folder/file.extension', '/home/folder/file.extension', '/home/folder/file.extension', '/home/folder/file.exten

我试图用文件URL列表定义一个数组,然后对每个文件进行解析,如果找到预定义字符串,则替换该字符串。由于某些原因,我所拥有的不起作用,我不确定什么是不正确的:

<?php

$htF = array('/home/folder/file.extension', '/home/folder/file.extension', '/home/folder/file.extension', '/home/folder/file.extension', '/home/folder/file.extension');

function update() {
global $htF;
$handle = fopen($htF, "r");
if ($handle) {
     $previous_line = $content = '';
     while (!feof($handle)) {
          $current_line = fgets($handle);

          if(stripos($previous_line,'PREDEFINED SENTENCE') !== FALSE)
          {
               $output = shell_exec('URL.COM');
               if(preg_match('#([0-9]{1,3}\.){3}[0-9]{1,3}#',$output,$matches))
               {
                    $content .= 'PREDEFINED SENTENCE '.$matches[0]."\n";
               }
          }else{
               $content .= $current_line;
          }
          $previous_line = $current_line;
     }
     fclose($handle);

     $tempFile = tempnam('/tmp','allow_');
     $fp = fopen($tempFile, 'w');
     fwrite($fp, $content);
     fclose($fp);
     rename($tempFile,$htF);
     chown($htF,'admin');
     chmod($htF,'0644');
}
}
array_walk($htF, 'update');
?>

任何帮助都将不胜感激

有这样一行:

 if(stripos($previous_line,'PREDEFINED SENTENCE') !== FALSE)
我想你只是想要一个在那里。是吗?

  • 您有打开该文件的权限吗
  • 您有写入/tmp的权限吗
  • 您是否具有写入目标文件或文件夹的权限
  • 您有权访问chown吗
  • 你查过你的正则表达式了吗?试试看它是否有效

尝试添加错误消息或为这些失败条件引发异常。

您正在更新函数中使用
$htF
作为全局,这意味着您正在尝试
fopen()
数组

$fh = fopen($htF, 'r');
将被解析为

$fh = fopen('Array', 'r');
并返回false,除非您碰巧有一个名为“Array”的文件


您还没有为函数指定任何参数,因此array\u walk无法传入它当时正在处理的数组元素。

否。stripos可能返回
0
(字符串开头),它是
==FALSE
,但不是
==FALSE
(未找到)。类型比较在这里非常重要,我忘了包括我通过SSH运行脚本,它没有返回这样的文件或目录/file.extension:第1行:?php/home/folder/file.extension:第2行://:是一个目录/home/folder/file.extension:第3行://:是一个目录/home/folder/file.extension:第4行:意外标记附近的语法错误
('/home/folder/file.extension:第4行:
$htF=array('/home/folder/file.extension'、'/home/folder/file.extension'、'/home/folder/file.extension'、'/home/folder/file.extension')因此,您的错误出现在第4行之前,这显然是您没有粘贴的,因为第4行是
$htF=array(etc)
看起来不错。语法错误意味着文件的基本语法有某种错误,与我上面提到的任何错误都没有任何关系。此外,如果
/home/folder/file.extension
不存在,脚本也无法工作。您需要创建此文件。对不起,如果我理解,第1行是这样的显然,如果任何被定义的文件/URL不存在,那么整个脚本都会失败?我该如何让脚本在具有有效文件的数组成员上执行函数,并跳过不存在的数组元素?那么我该如何解决这个问题?
函数更新($htF){…}
并从函数中删除全局定义。这样可以让arraywalk传入其当前数组元素。@knittl你是什么意思?我不认为我在URL中使用了协议,是吗?哦…我的错。我误解了,对不起