Today i have a problem with my script, my script should search for (.css files)
I've used a code to:
- Search for all subfolders in a root folder
- Make all paths of subfolders in an array
- 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])) {
开发者_JS百科 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.
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.
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[] = ..
)
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]);
}
精彩评论