Синтаксис переменных в PHP - PullRequest
0 голосов
/ 25 февраля 2012

Как вы можете видеть из моего кода ниже, я установил переменную ($ query), равную данным, отправленным из внешней формы.После этого я проверил переменную, повторив ее, поэтому переменная, кажется, установлена ​​правильно.

Проблема в том, что в нижней части я пытаюсь создать другую переменную с именем $ str_to_find, где я хочу, чтобы она была установленавывести мою исходную переменную $ query.Однако, когда я просматриваю вывод, ничего не появляется вообще после того, как код обрабатывает эту переменную в нижней части моего кода.Я не понимаю, почему он не отображает вывод.

<?php
$query = $_POST['query']; 

echo "$query"; 

find_files('.');
function find_files($seed) {
    if(! is_dir($seed)) return false;
    $files = array();
    $dirs = array($seed);
    while(NULL !== ($dir = array_pop($dirs)))
    {
        if($dh = opendir($dir))
        {
            while( false !== ($file = readdir($dh)))
            {
                if($file == '.' || $file == '..') continue;
                $path = $dir . '/' . $file;
                if(is_dir($path)) {
                    $dirs[] = $path;
                }
                else {
                    if(preg_match('/^.*\.(php[\d]?|js|txt)$/i', $path)) {
                        check_files($path);
                    }
                }
            }   
            closedir($dh);
        }
    }
}

function check_files($this_file) {
    $str_to_find = $query;
    if(!($content = file_get_contents($this_file))) {
        echo("<p>Could not check $this_file</p>\n");
    }
    else {
        if(stristr($content, $str_to_find)) {
            echo("<p>$this_file -> contains $str_to_find</p>\n");
        }
    }
    unset($content);
}
?>

ОБНОВЛЕННЫЙ КОД

<?php
 $query = $_POST['query'];



find_files('.');
function find_files($seed) 

{


if(! is_dir($seed)) return false;
$files = array();
$dirs = array($seed);
while(NULL !== ($dir = array_pop($dirs)))
{
  if($dh = opendir($dir))
    {
      while( false !== ($file = readdir($dh)))
        {
          if($file == '.' || $file == '..') continue;
          $path = $dir . '/' . $file;
          if(is_dir($path)) {    $dirs[] = $path; }
          else { if(preg_match('/^.*\.(php[\d]?|js|txt)$/i', $path)) { check_files($path); }}
        }
      closedir($dh);
    }
}
}

function check_files($this_file) 
{

$query = $_POST['query'];

$str_to_find = $query;
if(!($content = file_get_contents($this_file))) { echo("<p>Could not check $this_file</p>\n"); }
else { if(stristr($content, $str_to_find)) { echo("<p>$this_file -> contains
$str_to_find</p>\n"); }}
unset($content);
}

?>

Ответы [ 4 ]

3 голосов
/ 25 февраля 2012

Это проблема определения объема.Ваша переменная $ query (и в действительности любые переменные, не созданные непосредственно в теле функции) недоступны в файлах check_files.

Вы должны передать $ query в качестве параметра функции.

function check_files($this_file, $query) {
    // ...
}

Существуют и другие варианты, чтобы сделать переменные «глобальными», однако это редко бывает разумной идеей.

2 голосов
/ 25 февраля 2012

Причина, по которой он не работает, заключается в том, что $ query находится вне области действия функции. Если вы хотите использовать переменную, объявленную вне функции внутри нее, вам нужно либо передать ее как параметр, либо использовать

function check_files($this_file) {
    global $query;
    $str_to_find = $query;

Хотя передача его в качестве параметра предпочтительнее использования global.

0 голосов
/ 25 февраля 2012

Вам необходимо объявить глобальный $query согласно руководству PHP , если нет, то синтаксический анализатор будет считать, что $query является локальной переменной области видимости (local as in "только в пределахэта функция ")

function check_files($this_file) {
global $query;
$str_to_find = $query;
...
0 голосов
/ 25 февраля 2012

Переменная $query объявлена ​​вне функции check_files() scope. Если вы хотите получить к нему доступ, поставьте global $query; в начале функции.

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