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

发布于 2024-11-05 21:55:34 字数 1188 浏览 1 评论 0原文

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

我使用了代码:

  1. 搜索根文件夹中的所有子文件夹
  2. 将子文件夹的所有路径放入数组中
  3. 使用 foreach(){glob ....},脚本应该找到 css 文件的所有路径

这是我的代码:

$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() 提供的参数无效

我确定我的数组不为空。

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

谢谢。

Today i have a problem with my script, my script should search for (.css files)

I've used a code to:

  1. Search for all subfolders in a root folder
  2. Make all paths of subfolders in an array
  3. by using foreach(){glob....}, the script should found all paths of css files

Here is my code :

$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);
    }
}

When i start my script i found an waning message:

Warning: Invalid argument supplied for foreach() in /home/u274517531/public_html/libs/functions.php on line 131

I'm sure my array is not empty.

So, anyone can help me how to solve this problem ?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

腹黑女流氓 2024-11-12 21:55:34

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

var_dump($add);

很可能是查找文件和 glob() 返回FALSE

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

You say you are sure that your array is not empty, but what the Invalid argument supplied for foreach() error message means is that it is not even an array. Try it youself if you don't believe it:

var_dump($add);

Most likely, there was an error finding files and glob() is returning FALSE:

Returns an array containing the
matched files/directories, an empty
array if no file matched or FALSE on
error.

东走西顾 2024-11-12 21:55:34

把这个:改成

$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[] = .. 强制排列的)

Change this:

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

to this:

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

We don't know which line 131 is, so I don't know which foreach fails.

(I'm guessing the 2nd, because the first is practically forced to array by $path[] = ..)

吃颗糖壮壮胆 2024-11-12 21:55:34

我今天在 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]);
}

I found the same issue with a PHP script today and it took switching from a foreach loop to a for loop to fix it. Not sure what means, the array looks and works the same.

// 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]);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文