Как я могу сделать редактирование файла условным?

Вот мой код:

$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 сначала проверить, если такой же директории не существует, затем добавить ее, иначе ничего не делать?

2

Решение

Вы должны сделать это, как показано ниже:

<?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));
}
?>
1

Другие решения

Это то, для чего созданы блоки catch. Я нахожусь на мобильном телефоне, поэтому не могу предоставить вам код, но вот небольшая идея для вас:

Сохраните исходное содержимое файла и оберните ваш код в блок try catch. Если произошла ошибка, восстановите исходный контент в блоке catch.

1

Как я могу добавить условие на пути file_put_contents, чтобы сначала проверить, если такой же каталог не существует,

Если файл не слишком большой, вы можете просто прочитать его в строку и проверить с помощью strpos:

if(strpos(file_get_contents($file), "<Directory $path/public>") === false){
$virtualHost = file_put_contents(...);
}
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector