Первоначально я разделил свой cf_replace() и внутренний цикл foreach() в другом .php-файле. Когда я запускал свой скрипт.php, который называл этот код, все было в порядке. Теперь, когда мне нужно объединить два сценария php в один, один из моих циклов foreach() не поддерживает функцию cf_replace внутри каталога и вместо этого выплескивает пустые файлы в мой текущий каталог! Я некоторое время смотрел на этот код и хотел бы получить свежий набор глаз.Почему моя строка foreach() возвращает файлы в мой текущий каталог?
$ip = $argv[1];
// Declare vars - e.g. $currentTime
$htmlDir = "app/HtmlPages/$ip" ."-". "$currentTime/$ip/index.php/art";
...
// Make the directory where the generated HTML files will go.
mkdir("app/HtmlPages/$ip" ."-". "$currentTime", 0777, false);
// Use wget to recurse over the entire website, downloading every webpage.
$wget_cmd = "wget -P app/HtmlPages/$ip"."-"."$currentTime/ \
--recursive \
--no-clobber \
--domains $ip \
http://$ip/index.php/art/art.htm";
exec ($wget_cmd);
...
// Iterate through each Html file in $htmlDir and replace with ColdFusion
foreach(new DirectoryIterator($htmlDir) as $htm_file)
{
if($htm_file->isDot() || !$htm_file->isFile()) {
continue;
}
foreach(new DirectoryIterator ('./cf_templates/') as $cf_file)
{
// Checks for all files
if ($cf_file->isDot() || ! $cf_file->isFile()) {
continue;
}
// Grabs the template name and content to replace
$cf_name = $cf_file->getBasename($cf_file->getExtension());
$cf_code = file_get_contents('./cf_templates/' . $cf_file);
cf_replace($cf_name, $cf_code, $htm_file);
}
echo "Finished replacing Html code in $htm_file.\r\n";
}
...
function cf_replace($name, $new_code, $source) {
$content = file_get_contents($source);
$start = preg_quote("<!-- $name COLDFUSION BEGIN -->" , "#");
$end = preg_quote("<!-- $name COLDFUSION END -->", "#");
$needle_search = '#($start)(.*?)($end)#si';
$temp = preg_replace($needle_search, $new_code, $content);
$temp = file_put_contents($source, $temp);
return $temp;
}
Я думаю, что file_put_contents() в cf_replace() будет просто поместить файлы обратно в исходный файл - который хранится в том же каталоге, ... нет? Любая помощь приветствуется!
К сожалению, сообщение об ошибке, я обычно получаю: 'PHP Warning: file_get_contents (test1.htm): не удалось открыть поток:' и 'Предупреждение: file_put_contents (app/HtmlPages/server.com-2015_11_20_11: 25: 33/server.com/index.php/art) ' – arl
' DirectoryIterator' просто возвращает имена файлов, они не включают префикс каталога. При попытке доступа к файлам вам необходимо указать каталог. – Barmar
также 'DirectoryIterator ('./cf_templates/')' будет относиться к вашему текущему рабочему каталогу, а не к каталогу '$ htm_file' или' $ htmlDir', если вы специально не измените каталог в своем скрипте. –