дождитесь завершения копирования () - PullRequest
3 голосов
/ 28 июля 2011

есть ли способ проверить, скопирован ли файл, прежде чем продолжать выполнение цикла php?

У меня есть цикл for, и в цикле он собирается копировать файл.Теперь я хочу, чтобы он ждал, пока текущий файл не будет скопирован, прежде чем продолжить цикл.

пример:

for ($i = 1; $i <= 10; $i++)
{
$temp = $_FILES['tmp_name'];
$extension = '.jpg';

copy("$temp_$i_$extension", "$local_$i_$extension");

// not sure what to do here

if (FILE_DONE_COPYING())
{
    CONTINUE_LOOP();
}
else
{
    PAUSE_LOOP();
}
}

это просто пример.я понятия не имею, как это сделать ... кто-нибудь может войти?

Ответы [ 7 ]

13 голосов
/ 28 июля 2011

Это то, что copy () делает в PHP - оно блокируется, пока файл не будет скопирован. Вам ничего не нужно делать, кроме проверки возвращаемого значения, чтобы убедиться, что операция прошла успешно.

2 голосов
/ 28 июля 2011

PHP обрабатывает его построчно, шаг за шагом, поэтому он ожидает завершения копирования ()

1 голос
/ 28 июля 2011

copy ожидает завершения, прежде чем продолжить выполнение.Это синхронный звонок.Но он может вернуть false, если он не работал, и ваша копия не будет работать, поскольку $temp_ и $i_ не являются определенными переменными.Поэтому, возможно, вы думаете, что копия не заканчивается, когда она вообще не работает вообще.

Вы должны использовать:

copy("{$temp}_{$i}_$extension", "{$local}_{$i}_$extension");

ИЛИ

copy($temp.'_'.$i.'_'.$extension, $local.'_'.$i.'_'.$extension);
1 голос
/ 28 июля 2011

Если вы не столкнетесь с проблемой использования многопоточности и не выполняете копирование асинхронно, PHP не будет перемещаться в строку после копирования до тех пор, пока не завершится.

1 голос
/ 28 июля 2011

copy возвращает true в случае успеха и false при ошибке. Проверьте это.

0 голосов
/ 28 июля 2011

Вы можете использовать цикл while с вызовами sleep, чтобы отложить проверку, и просто выйти из цикла while, если файл существует под новым именем.

0 голосов
/ 28 июля 2011

Что заставляет вас думать, что copy () вернется до его завершения?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...