PHP и APC, прогресс загрузки файла не кэшируется? - PullRequest
2 голосов
/ 29 июня 2010

Я по всему интернету читал на APC, и мне кажется, что это отличный способ обнаружить загрузку файлов.

У меня, однако, проблема.

Я знаю, как вызывать файлы и все остальное, используя Ajax, и это то, что я планирую сделать, но ради тестирования я делаю что-то вроде этого.

Хорошо, у меня 3 файла.

form.php upload.php status.php

form.php содержит:

<input type="hidden" name="APC_UPLOAD_PROGRESS" value="1234" />
<input type="file" id="fileIn" name="file" />

(Я знаю, что мне нужно будет использовать уникальный идентификатор в APC_UPLOAD_PROGRESS. Опять же, это только для тестирования.)

Хорошо, теперь в Upload.php есть обычный скрипт загрузки PHP:

$origin = $_FILES['file']['name'];
if(move_uploaded_file(...etc...etc)...

И Status.php использует APC:

$upload = apc_fetch('upload_1234');
if ($upload) {
    if ($upload['done'])
        $percent = 100;
    else if ($upload['total'] == 0)
        $percent = 0;
    else
        $percent = $upload['current'] / $upload['total'] * 100;

echo $percent;
}

Теперь я загружаю файл обычным методом HTTP и использую другое окно для мониторинга Status.php.

Проблема в том, Status.php ничего не возвращает!

Однако, если я напишу print_r (apc_fetch ( 'upload_1234'));

в upload.php, он возвращает правильный массив со всеми деталями и т. Д.

Что я делаю не так?

Спасибо.

1 Ответ

2 голосов
/ 08 июня 2011

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

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

...