为foreach()提供的参数无效 - 使用glob

时间:2011-05-08 11:22:21

标签: php foreach warnings

今天我的脚本出现问题,我的脚本应该搜索(.css文件)

我使用了代码:

  1. 搜索根文件夹中的所有子文件夹
  2. 在数组中创建子文件夹的所有路径
  3. 通过使用foreach(){glob ....},脚本应该找到css文件的所有路径
  4. 这是我的代码:

    $path = '';
    $stack[] = $dir;
    
    while ($stack) {
        $thisdir = array_pop($stack);
    
        if ($dircont = scandir($thisdir)) {
            $i=0;
    
            while (isset($dircont[$i])) {
                if ($dircont[$i] !== '.' && $dircont[$i] !== '..') {
                    $current_file = "{$thisdir}/{$dircont[$i]}";
    
                    if (is_dir($current_file)) {
                        $path[] = "{$thisdir}/{$dircont[$i]}";
                        $stack[] = $current_file;
                    }
                }
                $i++;
            }
        }
    }
    
    $path[] = $dir;
    foreach($path as $dirname){
        $add = glob($dirname . '/*.css');
    
        foreach($add as $file){
            $code = file_get_contents($file);
            $code_arab = arabicer($code);
            file_put_contents($file,$code_arab);
        }
    }
    

    当我开始编写脚本时,我发现了一条消息:

      

    警告:在第131行的/home/u274517531/public_html/libs/functions.php中为foreach()提供的参数无效

    我确定我的数组不是空的。

    那么,任何人都可以帮我解决这个问题吗?

    感谢。

3 个答案:

答案 0 :(得分:1)

你说你确定你的数组不是空的,但为foreach()错误消息提供的无效参数意味着它甚至不是数组 。如果你不相信,请自己尝试一下:

var_dump($add);

最有可能的是,找到文件时出错,glob()正在返回FALSE

  

返回包含的数组   匹配的文件/目录,一个空的   数组,如果没有文件匹配或FALSE打开   错误。

答案 1 :(得分:0)

改变这个:

$path[] = $dir;
foreach($path as $dirname){
    $add = glob($dirname . '/*.css');
    foreach($add as $file){

到此:

$path[] = $dir;
var_dump($path);
foreach($path as $dirname){
    $add = glob($dirname . '/*.css');
    var_dump($add);
    foreach($add as $file){

我们不知道131行是哪一行,所以我不知道哪个foreach失败了。

(我猜第二个,因为第一个实际上被强迫排列$path[] = ..

答案 2 :(得分:0)

我今天发现PHP脚本存在同样的问题,它需要从foreach循环切换到for循环来修复它。不确定是什么意思,阵列的外观和工作原理相同。

// Errors out
$files = glob($directory.'*.html');
foreach($files as $file){
    echo($file);
}

// No error
$files = glob($directory.'*.html');
for($i=0; $i<count($files); $i++){
    echo($files[$i]);
}