当使用的目录*
不存在时,我需要 nginx 失败。
当conf.d
目录不存在时该行;
include /path/to/conf.d/*.conf;
跑步时通过nginx -t
。
我完全知道该行不会导致错误的原因,是因为使用通配符时nginx
会使用。它只是找不到文件,不包括它们,然后通过测试。当目录中没有文件时,我如何才能成功,而当目录不存在时却失败?glob
nginx -t
这是否可能,无需创建一个空文件conf.d
并包含该文件或使用if
语句?
答案1
str_replace
我设法使用解决了该问题php
。
$files = glob('/path/to/nginx/files/*');
$toFind = $dirName.'/*';
$toReplace = $dirName.'/';
$editedFiles = [];
$editedFilesContents = [];
foreach ($files as $file)
{
if (!is_dir($file))
{
$temp = file_get_contents($file);
$contents = str_replace($toFind, $toReplace, $temp, $count);
if ($count > 0)
{
$editedFiles[] = $file;
$editedFilesContents[] = $temp;
file_put_contents($file, $contents);
}
}
}
$error = exec('/usr/sbin/nginx -t', $output);
foreach ($editedFiles as $i => $file)
file_put_contents($file, $editedFilesContents[$i]);
对于这样一个微不足道的问题,这似乎有点小题大做,但它允许我删除和重命名 nginx 配置页面中的文件夹,而不会冒破坏我的网站的风险。