2012-02-15 5 views
3

Как я могу регистрировать и загружать текущие байты из html-формы в PHP-скрипт? Я хочу позже сохранить текущий прогресс в сеансе или журнале, чтобы другой скрипт AJAX мог его получить. Вот мой текущий код для чтения текущих байтов, но он не работает.Как получить текущие загруженные байты в php?

$file_type = $_FILES['Filedata']['type']; 
$file_name = $_FILES['Filedata']['name']; 
$file_size = $_FILES['Filedata']['size']; 
$file_tmp = $_FILES['Filedata']['tmp_name']; 

$filePointer = fopen($_FILES['Filedata']['tmp_name'], "rb"); 
$rr=0; 

if ($filePointer!=false){ 
while (!feof($filePointer)){ 
    $fileData = fread($filePointer, 4096); 
    $rr =$rr+strlen($fileData); 
    // Process the contents of the uploaded file here... 
    $_SESSION['fname']=$rr; 
} 

fclose($filePointer); 
} 

move_uploaded_file ($file_tmp, "files/".$file_name); 
+0

Еще одна причина, по которой PHP5.4 будет ** (есть) ** удивительным. Ниже приведен пример новой [функции выполнения загрузки файла] (http://chemicaloliver.net/programming/php-5-4-file-upload-progress-and-html5-progress-bars/). Подождите, вы имеете в виду, что вы не играли с последними кандидатами на выпуск 5,4? О человек, они ** сладость **. – rdlowrey

+0

Im unsure, если мой текущий хост установит это для меня. Самый высокий, который я могу задать для своих настроек PHP, - php 5.3. Могу ли я продолжать эту функцию с 5.3? – Zakukashi

+0

К сожалению, нет. Я сомневаюсь, что все хостинговые компании установят 5.4, но не должны, поскольку они официально не готовы к использованию в производстве. Он должен быть официально выпущен в следующем месяце или около того. Пока вам придется взломать решение из ответов ниже. Они довольно твердые, так что с вами все будет в порядке. Если вы находитесь на общедоступном хостинге, у вас могут возникнуть трудности с ответами ниже. Если у вас есть виртуальный частный сервер (vps), у вас не должно возникнуть проблемы с этим (или чтобы ваш хост установил необходимые расширения для расширений). – rdlowrey

ответ

3

Существует PECL пакет: http://pecl.php.net/package/uploadprogress

Else проверить это:

Вы должны найти правильный файл в папку TMP и измерьте размер. Этот размер должен отображаться на странице, которая сканируется через AJAX каждые несколько секунд. Проблема заключается в том, как сопоставить правильный сеанс и файл. Но это не невозможно ...

4

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

Ваш сервер должен иметь APC или аналогичные пакеты PECL установлены

http://devzone.zend.com/1812/using-apc-with-php/

Или с помощью файла API HTML5

http://www.matlus.com/html5-file-upload-with-progress/

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

+0

Ну, я делаю это для Internet Explorer. Если эта загрузка HTML5 api совместима с I.E, и если ее можно использовать в коммерческом сервисе, тогда это будет здорово. – Zakukashi

+0

Также мой хост не позволяет устанавливать APC. – Zakukashi

+0

Да, некоторые хосты не позволяют устанавливать APC и другие пакеты pecl, поэтому я также упомянул API HTML5. И я считаю, что IE имеет несколько HTML5 api в 9, но может быть ограниченным, он будет более полезен, когда они выпустят версию 10. Кроме того, вам понадобится использовать скрипт CGI на основе флэш-памяти, java или использовать на стороне сервера, поскольку он имеет некоторые функции, которые могут делать то, что необходимо –

Смежные вопросы