Определите массив расположений файлов, проанализируйте и замените.Где моя ошибка? - PullRequest
0 голосов
/ 16 августа 2011

Я пытаюсь определить массив со списком 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');
?>

Любая помощь будет высоко ценится!

Ответы [ 3 ]

0 голосов
/ 16 августа 2011
  • У вас есть права на открытие файла?
  • У вас есть права на запись в / tmp?
  • У вас есть права на запись в конечный файл или папку?
  • У вас есть права на chown?
  • Вы проверили свое регулярное выражение? Попробуйте что-то вроде http://regexpal.com/, чтобы проверить, действительно ли это.

Попробуйте добавить сообщения об ошибках или выдать исключения для всех условий отказа для них.

0 голосов
/ 16 августа 2011

Вы используете $htF в функции обновления как глобальное, что означает, что вы пытаетесь fopen() массив.

$fh = fopen($htF, 'r');

будет проанализирован как

$fh = fopen('Array', 'r');

и верните false, если у вас нет файла с именем 'Array'.

Вы также не указали никаких параметров для своей функции, поэтому array_walk не может передать элемент массива, с которым он имеет дело, ввремя.

0 голосов
/ 16 августа 2011

есть эта строка:

 if(stripos($previous_line,'PREDEFINED SENTENCE') !== FALSE)

и я думаю, вы просто хотите! = Там. Да?

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