Вот мой код:
$file = '/etc/apache2/sites-available/000-default.conf';
// Laravel Projects
$newDirectory = "<Directory $path/public>
Allow Override all
Require all granted
</Directory>";
$virtualHost = file_put_contents($file,str_replace("</VirtualHost>","$newDirectory\n\n</VirtualHost>",file_get_contents($file)));
Это работает также. Как видите, открывается 000-default.conf
файл (в Linux) и добавляет новый каталог в конце <VirtualHost>
блок.
Моя проблема в том, что иногда остальная часть кода выдает ошибку, и когда я снова запускаю весь скрипт, код выше добавит этот каталог дважды.
Как я могу добавить условие на пути file_put_contents
сначала проверить, если такой же директории не существует, затем добавить ее, иначе ничего не делать?
Вы должны сделать это, как показано ниже:
<?php
$file = '/etc/apache2/sites-available/000-default.conf';
// Laravel Projects
$newDirectory = "<Directory $path/public>
Allow Override all
Require all granted
</Directory>";
$virtualHostContent = file_get_contents($file);
if( strpos($virtualHostContent,"<Directory $path/public>") === false) {
$virtualHost = file_put_contents($file,str_replace("</VirtualHost>","$newDirectory\n\n</VirtualHost>",$virtualHostContent));
}
?>
Это то, для чего созданы блоки catch. Я нахожусь на мобильном телефоне, поэтому не могу предоставить вам код, но вот небольшая идея для вас:
Сохраните исходное содержимое файла и оберните ваш код в блок try catch. Если произошла ошибка, восстановите исходный контент в блоке catch.
Как я могу добавить условие на пути file_put_contents, чтобы сначала проверить, если такой же каталог не существует,
Если файл не слишком большой, вы можете просто прочитать его в строку и проверить с помощью strpos:
if(strpos(file_get_contents($file), "<Directory $path/public>") === false){
$virtualHost = file_put_contents(...);
}