PHP: как мне скопировать временный файл загрузки в нескольких местах? - PullRequest
14 голосов
/ 11 марта 2010

как я могу дважды скопировать один и тот же файл? Я пытаюсь сделать что-то вроде этого:

                copy($file['tmp_name'], $folder."1.jpg");
            copy($file['tmp_name'], $folder."2.jpg");
            copy($file['tmp_name'], $folder."3.jpg");

А сколько времени у временных файлов до их уничтожения сервером?

Я тоже пытаюсь использовать move_uploaded_file, но не могу заставить его работать Я хочу создать 2 превью из загруженного файла.

Некоторая помощь?

Спасибо,

Ответы [ 4 ]

31 голосов
/ 11 марта 2010

move_uploaded_file переместит файл, а не скопирует его - это означает, что он будет работать только один раз.

Если вы используете copy, то не должно быть никаких ограничений на количество копий, которые вы можете копировать: временный файл, созданный при загрузке, будет уничтожен только в конце выполнение вашего скрипта (если, конечно, вы не переместите / удалите его раньше)


Тем не менее, может быть, решение будет использовать сначала move_uploaded_file, а затем copy?
Немного похоже, я думаю:

if (move_uploaded_file($file['tmp_name'], $folder . '1.jpg')) {
    copy($folder . '1.jpg', $folder . '2.jpg');
    copy($folder . '1.jpg', $folder . '3.jpg');
}

Это позволит вам получить чеки, предоставленные move_uploaded_file ...


Если это не сработает, убедитесь, что:

  • $folder содержит то, что вы хотите - включая окончательный /
  • Это $file['tmp_name'] также содержит то, что вы хотите (я предполагаю, что это какая-то копия $_FILES - убедитесь, что копия $_FILES в $file сделана правильно)
4 голосов
/ 11 марта 2010

Почему не move_uploaded_file() не работает?Вы пытаетесь использовать его дважды?Вы не можете этого сделать, он перемещает его, поэтому второй раз не удастся.

Я бы просто использовал move_uploaded_file() один раз, а затем сделал бы вторую копию из местоположения, в которое вы только что его переместили:

move_uploaded_file($uploaded, $destination);
copy($destination, $destination2);
2 голосов
/ 11 марта 2010

У меня нет ответа на ваш вопрос напрямую, но как насчет этого обходного пути?

copy($file['tmp_name'], $folder."1.jpg");
copy($folder."1.jpg"  , $folder."2.jpg");
copy($folder."1.jpg"  , $folder."3.jpg");
1 голос
/ 11 марта 2010

Спасибо, парень, ты даешь мне свет.

Я сделал что-то вроде этого:

    $objUpload = new Upload();
    $filename = $objUpload->uploadFile($newFile,$folder); 
// returns a string    
    $objUpload->makeThumb($filename,$folder,"thumbs",139); 
// makes a 139px thumbnail from the original file uploaded on the first step
    $objUpload->makeThumb($filename,$folder,"mini",75); 
// makes another thumb from the same file

Используя move_ulploaded_file и copy, мы можем сделать только один большой палец. :)

...