Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Upload файла на сервер по частям
 
 автор: fivemusic   (03.08.2008 в 19:42)   письмо автору
 
 

Здравствуйте!
Написал скрипт в котром есть поле куда вводишь урл на файл жмешь кнопку - файл закачивается на сервер. Проблема в том, что файлы более 1 МБ не закачиваются... Сделал загрузку по частям, закачивается только 1 мб если сделать обычную загрузку (не по частям то максимально закачивается 15 мб примерно за 1-2 сек) Как сделать поправить скрипт чтобы грузил по частям скажем файлы до 150 мв. Вот скрипт :

<form><input type=text name=url value="" style="width:650px"><input type=submit></form>
<pre>
<?
set_time_limit
(0);
echo 
time()."\n";

if(
$_GET[url])
{
if(
$x=get_parameter($_GET[url]) AND $x[range])
echo 
"Файл : ".$x[name]." Размер : ".$x[size]."\n";
        if(
$content=download_x($_GET[url],$x[size]))
        {
        
$time=time(); 
        
$folder=$_SERVER[DOCUMENT_ROOT]."/download/other/$time";
        if(!
file_exists($_SERVER[DOCUMENT_ROOT]."/download")) mkdir($_SERVER[DOCUMENT_ROOT]."/download"0777);
        if(!
file_exists($_SERVER[DOCUMENT_ROOT]."/download/other")) mkdir($_SERVER[DOCUMENT_ROOT]."/download/other"0777);
        if(!
file_exists($folder)) mkdir($folder0777);
        
$f=fopen("$folder/".$x[name], w);
        
fwrite($f$content);
        
fclose($f);
        echo 
"Файл закачан! <br>\n$_GET[url]\n<br>Размер:".$x[size];
        }    
        else echo 
"РАзмеры не совпадают!";
}

else echo 
"Файл не поддерживает докачку!";


function 
download_x($url,$size,$stek=30000)
{
$stek=$stek*1024;
  
$url parse_url($url); 
  
$host $url['host']; 
  
$path = isset($url['path'])? $url['path'] : "/"
  
$port = isset($url['port'])? $url['port'] : 80
  if(isset(
$url['query'])) $path .= '?' $url['query']; 
 
$n=round($size/$stek);
 if(
$size%$stek>0$n+=1;
$ct="";
FOR(
$ran=0$ran<$n$ran++)
{
echo 
" Part ".($ran+1)."\n"$ot=($ran*$stek); $do=($ran*$stek+$stek);
if((
$ran+1)==$n$do=$size; if($ot!=0$ot+=1;
  if(!(
$f fsockopen($host$port$ern$ers))) { echo "--Ошибка создания сеанса!\n"; break; }
    else {
        
fputs($f"GET $path HTTP/1.0\r\nHOST: $host\r\n".$handll."\r\n\r\n"); $cts="";
        for(
$reply true; !feof($f); )   
        { 
        
$line fgets($f);   
        if(
$reply==false$cts .= $line;
        if(
$line == "\r\n"$reply=false;
        } 
        
fclose($f); 
        }
$ct.=$cts;
if((
$ran+2)==$n) break; 
}
if(
strlen($ct)==$size) return $ct; else { echo "\n--SIZE| ".strlen($ct)."/".$size."\n"; return false; }
}


function 
get_parameter($url)
{
    
$out[name]=basename($url);
  
$url parse_url($url); 
  
$host $url['host']; 
  
$path = isset($url['path'])? $url['path'] : "/"
  
$port = isset($url['port'])? $url['port'] : 80
  if(isset(
$url['query'])) $path .= '?' $url['query']; 
  if(!(
$f fsockopen($host$port$ern$ers))) return false;
else {
    
fputs($f"GET $path HTTP/1.0\r\nHOST: $host\r\n".$handll."\r\n\r\n");  $x=0;
    for(
$reply true; !feof($f); )   
    { 
$line fgets($f);   
    if(
$reply==true$reply .= $line;
    if(
$line == "\r\n") break;
    } 
fclose($f); 
    if(
eregi("Accept-Ranges: bytes",$reply)) $out[range]=true; else $out[range]=false;
    if(
preg_match("|Content-Length: ([0-9]+)+|iS",$reply,$o)) $out[size]=$o[1]; else $out[size]=0;
    return 
$out;
    }

}
?>

  Ответить  
 
 автор: Trianon   (03.08.2008 в 20:38)   письмо автору
 
   для: fivemusic   (03.08.2008 в 19:42)
 

Как Вы думаете, какой длины строку можно положить в переменную?

  Ответить  
 
 автор: fivemusic   (03.08.2008 в 21:07)   письмо автору
 
   для: Trianon   (03.08.2008 в 20:38)
 

Если честно то понятия не имею! =)

  Ответить  
 
 автор: fivemusic   (04.08.2008 в 10:38)   письмо автору
 
   для: fivemusic   (03.08.2008 в 21:07)
 

Такс, скрипт сделал. - При чтонии данных сделал что бы они писались (или уже дописывались) сразу в файл, потом идет сравнение размеров и все. - Пробовал загрузить скриптом на сайт 170 mb - прокатило! Причем очень быстро - меньше чем за 30 сек.

Но насчет переменной я так инфы и не нашел !!! Скажите ответ!

  Ответить  
 
 автор: Trianon   (04.08.2008 в 15:51)   письмо автору
 
   для: fivemusic   (04.08.2008 в 10:38)
 

http://www.php.net/manual/ru/ini.core.php#ini.memory-limit

  Ответить  
 
 автор: fivemusic   (04.08.2008 в 16:23)   письмо автору
 
   для: Trianon   (04.08.2008 в 15:51)
 

Спасибо, буду знать!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования