Intereting Posts

PHP: Есть ли команда, которая может удалить содержимое файла без его открытия?

Есть ли способ удалить содержимое файла в php, есть ли у меня какая-либо команда php, я знаю, что unlink но я не хочу удалять файл, а просто хочу удалить содержимое этого файла.

У меня есть файл, который я getCurrentDBSnap при getCurrentDBSnap функции getCurrentDBSnap , он принимает файл из /home/test/incoming folder и заполняет текущее состояние currentDB в файл с помощью fputcsv и помещает обратно файл в /home/test/outgoing .

В настоящее время файл остается во входящей папке, и когда я могу вызвать функцию getCurrentDBSnap он будет принимать файл и переопределять его с последним состоянием БД.

Q: Мой вопрос в том, возможно ли это вместо перезаписывания файла, мы можем удалить содержимое файла после getCurrentDBSnap , чтобы файл во входящей папке всегда был пустым?

Надеюсь, это имеет смысл 🙂

Solutions Collecting From Web of "PHP: Есть ли команда, которая может удалить содержимое файла без его открытия?"

Попробуйте file_put_contents($filename, "") ;

или

 unlink($filename); touch($filename); 

ftruncate – Усекает файл до заданной длины

пример

 $handle = fopen('/path/to/file', 'r+'); ftruncate($handle, 0); fclose($handle); 

Но вы должны открыть файл.

Я не знаю, записывали ли вы содержимое в файл, но если вы используете fopen и сначала вы fopen файл, вы в основном делаете то, что делает w режим.

Из документации :

'w': открыт только для записи; поместите указатель файла в начало файла и обрезайте файл до нулевой длины . Если файл не существует, попытайтесь его создать.

Поэтому я действительно не вижу необходимости в опорожнении, потому что вы, вероятно, будете использовать режим w любом случае.

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

Возможно, это work-arround, если exec разрешен .. для ex on linux:

 <? shell_exec("rm -rf " . $filename " && touch ".$filename); ?> 

Это приведет к удалению вашего файла, а затем создаст его снова, поэтому он «появится», что вы опустошили содержимое, это просто с моей головы, а не с тем, что должно быть возможно. Или, если вы используете Linux и имеете доступ к exec command Я бы использовал awk или sed (лучше), чтобы очистить файл

Вы не можете изменить файл, не открывая его. Самый простой способ сделать это – открыть его и усечь его, пока вы его открываете, что в PHP будет выглядеть так:

 fclose(fopen($filename, "w+")); 

Если вы собираетесь вызывать оболочку unix (это то, что делает вызов system ()), самый простой способ – перенаправить / dev / null в файл, поэтому в PHP это будет:

 system(">$filename </dev/null"); 

Для этого подхода намного больше накладных расходов, но его можно обобщить и перевести на любой язык или среду, где у вас есть оболочка. В этой теме есть другие ответы, которые вы вызываете system () в rm, а затем прикоснитесь, чтобы воссоздать файл – помимо неатома, этот подход также пугает меня гораздо больше.

 file_put_contents($file_name, ""); 

Это лучший и простой способ очистки содержимого файла без удаления файла.