php: fwrite сохраняет до фреда, даже если после?

Это сложно объяснить в php. У меня есть система, которая читает файл, разбивает данные на строки («\ r \ n»), а затем просматривает строки и предлагает новые данные без одной строки, помеченной переменной $ n. Тогда это пишет.

Проблема в следующем: сначала fwrite (когда он последний), затем fread (первый), затем fwrite (последний).

Если у меня есть файл с 31 строкой, то хакер прочитает файл, как если бы у него уже было 30 строк с удалением правильной строки. Затем он снова вытащит нужную строку, так что я получу файл из 29 строк. НО если я уберу fread, файл из 31 строки загрузится правильно. Если я не удалю строку, то она сохранит все 31 строку.

Я упростил код настолько, насколько мог. Я даже добавил sleep (10), чтобы, надеюсь, отложить fwrite до тех пор, пока fread не прочитает.

Когда я вывожу другой файл, который работает очень хорошо, как положено, но если я попытаюсь взять этот выходной файл и переименовать его в исходный файл, я все равно получаю ту же проблему. Я также использовал file_get_contents с file_put_contents с теми же результатами.

Спасибо за любую помощь. Может быть, вы, ребята, можете сказать мне, где я иду не так. Вот код:

$handle = fopen($filename, 'r');
$Data = fread($handle, filesize($filename));
fclose($handle);

$pieces = explode("\r\n", $Data);

// $n = the line to delete

$info = '';
for($i = 0 ; $i < sizeof($pieces) ; $i++){
if($_REQUEST['n'] == $i && $pieces[$i] != ''){
$info .= $pieces[$i]."\r\n";
}
}

// $filename never changes
// $info is $Data without the specific $n line
$fp = fopen($filename, 'w+');
fwrite($fp, $info);
fclose($fp);

1

Решение

Как оказалось, это было результатом ошибки PHP 5.3.3. После обновления до PHP 5.6 или около того его проблема больше не возникает.

0

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

Других решений пока нет …

По вопросам рекламы [email protected]