kode
never knows best
Странности через CGI аплоад с браузерами
Мучал тут загрузку файлов, код:
index.html:
upload.cgi:
При разгрузке файла больше ~5 Мб - браузер пишет что отсылает данные, но бесконечно - те просто подвисает на загрузку (те сам не глючит, но бесконечно загружает). Грешу на скрипт, потому-что если использовать перловые аналоги всё ок.
ЗЫ. Написано аляповато - но это просто чтобы поигратся.
-~{}~ 29.12.07 05:31:
Мазилла пишет "The connection was reset"
-~{}~ 29.12.07 05:31:
Мб размер буфера увеличить?
-~{}~ 29.12.07 20:13:
ап. странно что никто с таким не сталкивался
Мучал тут загрузку файлов, код:
index.html:
PHP:
<form target="upload_frame" enctype="multipart/form-data" action="./upload.cgi" method="post">
<input id="image_file" type="file" class="file" name="image_file" >
<input type="submit" class="submit" value="Upload">
</form>
<iframe id="upload_frame" width="50%" height="400" name="upload_frame"></iframe>
PHP:
#!/usr/local/bin/php
<?php
include("functions.php");
echo ("Content-type: text/plain\n\n");
set_time_limit(0);
$length = $_SERVER['CONTENT_LENGTH'];
$in = fopen("php://stdin","r");
$first = fread($in,1024);
list($headers,$data) = explode("\r\n\r\n",$first,2);
$length -= strlen($headers)+4; //Вычитаем заголовки
$headers = parseHeader($headers); //Парсим заголовки
$boundary_str = "\r\n".$headers['boundary']."--\r\n"; //Получаем "пограничную" строку
$length -= strlen($fucken_str); //Вычитаем её длину, в итого получаем чистый размер файла
$pointer = 0;
//Открываем файл для записи
if(!$file = fopen("uploads/".$headers['Content-Disposition']['filename'],"w+")){
die("Cant open file");
}
$data = str_replace($boundary_str,'',$data); //это на тот случай если файл < 1024 байт
if(!$pointer = fwrite($file,$data)){
die("fuck: ".$data);
}
while (!feof($in)) {
if($pointer+1024 < $length){
$data = fread($in,1024); //Спокойно читаем
}else{ //Видимо последнее чтение
echo "Final reading\n";
$data = str_replace($boundary_str,'',fread($in,1024)); //Есть мегамалая вероятность (1 из 10000000) что можем удалить нето
}
$pointer += strlen($data);
fwrite($file,$data);
echo "Pointer: ",$pointer,"\n";
flush();
}
fclose($file);
fclose($in);
$filelength = filesize("uploads/".$headers['Content-Disposition']['filename']);
echo "Lengths ",$filelength,"/",$length;
?>
ЗЫ. Написано аляповато - но это просто чтобы поигратся.
-~{}~ 29.12.07 05:31:
Мазилла пишет "The connection was reset"
-~{}~ 29.12.07 05:31:
Мб размер буфера увеличить?
-~{}~ 29.12.07 20:13:
ап. странно что никто с таким не сталкивался