PHP中的变量语法

时间:2012-02-24 20:48:45

标签: php variables

从下面的代码中我可以看到,我设置的变量($ 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 个答案:

答案 0 :(得分:3)

这是范围界定的问题。您的$ query变量(实际上任何未在函数体中直接实例化的变量)在check_files中不可用。

您应该将$ query作为参数传递给函数。

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

存在使变量“全局”的另一种选择,但这很少是一个明智的想法。

答案 1 :(得分:2)

它不起作用的原因是因为$ query超出了函数的范围。如果要使用在函数内部声明的变量,则需要将其作为参数传递,或者使用

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

虽然将其作为参数传递,但优先使用global。

答案 2 :(得分:0)

变量$query在函数check_files()范围之外声明。如果要访问它,请将global $query;放在函数的开头。

答案 3 :(得分:0)

您需要根据PHP manual声明$query全局,否则,解析器将假定$query是本地范围变量(local,如“仅在此职能范围内”)

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