Как скопировать содержимое файла во временный файл на PHP? [дубликат]

этот вопрос уже есть ответ здесь:

Я попытался это:

$temp = tmpfile();
file_put_contents($temp,file_get_contents("$path/$filename"));

но я получаю эту ошибку: "предупреждение: file_put_contents () ожидает, что параметр 1 будет строкой"

Если я попробую:

echo file_get_contents("$path/$filename");

он возвращается к экрану файла содержимое в виде длинной строки. Где я ошибаюсь?

2 ответов


tmpfile() создает временный файл с уникальным именем в режиме чтения-записи (w+) и возвращает дескриптор файла для использования с fwrite, например.

$temp = tmpfile();
fwrite($temp, file_get_contents("$path/$filename"));

файл автоматически удаляется при закрытии (например, при вызове fclose (), или при отсутствии оставшихся ссылок на дескриптор файла, возвращаемый tmpfile ()), или при завершении скрипта. посмотреть php ref.


в Примере, который вы даете, вы хотите tempnam(), а не tmpfile().

  • tempnam() создает временный файл и возвращает путь к нему в виде строки. Затем вы можете передать эту строку в file_put_contents. Вы должны помнить, чтобы вручную удалить временный файл, как только вы закончите с ним.

  • tmpfile() создает временный файл и возвращает файловый ресурс / указатель использовать с fwrite() и другие функции работы с файлами. Кроме того, после завершения выполнения скрипта, временный файл создается tmpfile() автоматически удаляется.


вот ваш пример скрипта с использованием tempnam() вместо tmpfile():

$temp = tempnam(sys_get_temp_dir(), 'TMP_');

file_put_contents($temp, file_get_contents("$path/$filename"));