Я пытаюсь добавить определенные переменные в пару файлов, в которых уже есть некоторый контент.
Я использую file_get_contents для копирования содержимого определенного файла, а затем использую file_put_contents для вставки значений переменных вместе с существующим содержимым в этот файл.
Проблема в том, что на первом экземпляре он работает нормально, а во второй файл вставляет все, что было сохранено в памяти. Он помещает все содержимое из первого файла вместе с содержимым второго файла.
Есть ли способ очистить память перед выполнением следующего файла file_get_contents. Или моя концепция здесь ложна.
Вот мой код...
<?php
if ($_POST["submit"]) {
$ip = $_POST['ip'];
$subnet = $_POST['subnet'];
$gateway = $_POST['gateway'];
$hostname = $_POST['hostname'];
$domain = $_POST['domain'];
$netbios = $_POST['netbios'];
$password = $_POST['password'];
$ipfile = 'one.txt';
$file = fopen($ipfile, "r");
$ipfileContents = fread($file, filesize($ipfile));
$ipcontent = "ip='$ip'\n";
$ipcontent .= "netmask='$subnet'\n";
$ipcontent .= "gw='$gateway'\n";
$conten = $ipcontent . $ipfileContents;
$file = fopen($ipfile, "w");
fwrite($file, $ipfileContents);
fclose($file);
$ipsh = shell_exec('sh path/to/CHANGE_IP.sh');
$hostfile = 'two.txt';
$fileh = fopen($hostfile, "r");
$hostfileContents = fread($fileh, filesize($hostfile));
$hostcontent = "ip='$ip'\n";
$hostcontent .= "m_name='$hostname'\n";
$hostcontent .= "fqdn='$domain'\n";
$conten = $hostcontent . $hostfileContents;
$fileh = fopen($hostfile, "w");
fwrite($fileh, $hostfileContents);
fclose($fileh);
$hostsh = shell_exec('sh path/to/MODIFY_HOSTS.sh');
}
?>
Я пробовал отключить, но не работает
$ipfilecontents->__destruct();
unset($ipfilecontents);
ОБНОВЛЕНИЕ:
file_get_contents
& file_put_contents
имеет некоторые проблемы с параллелизмом. Поэтому мне пришлось изменить свой метод на fopen/fwrite/fclose
, и он работал безупречно. Спасибо за помощь, Хасинто.
unset
- person Mark Baker   schedule 20.03.2015echo
из$ipfileContents
и$hostfileContents
с соответствующими разделителями === между ними? - person Peter Bowers   schedule 20.03.2015fopen
иfwrite
. Таким образом, вам вообще не нужно читать файл в память. Тем не менее, это добавит новые данные в конец файла, но на самом деле это обычно так. - person GolezTrol   schedule 20.03.2015file_put_contents
также имеет режим добавления. И если вам нужно заблокировать файл, используйте вместо негоfopen
. - person Gumbo   schedule 20.03.2015shell_exec()
на случай, если он делает что-то странное... - person Peter Bowers   schedule 20.03.2015shell_exec()
тоже не сработало. @ПитерБауэрс - person PeeJay   schedule 20.03.2015echo
сразу после прочтения? - person Peter Bowers   schedule 20.03.2015file_put_contents
, и я почти уверен, что вы обнаружите, что ваши переменные не содержат того, что, по вашему мнению, они содержат... Пожалуйста, попробуйте эхо-трассировку. Вы должны проверить все 4 vars - по 2 перед каждым file_put_contents. - person Peter Bowers   schedule 21.03.2015