ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Ошибки Upload`a на php
  #1  
Старый 18.01.2008, 07:09
Аватар для Nightmarе
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


Отправить сообщение для Nightmarе с помощью ICQ
По умолчанию Ошибки Upload`a на php

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

НО! Если загружаемый файл весит например 100 метров и при 60 метрах закачка обрывается, то этот самый битый файл помещяется в директорию, и запись о нём заносится в текстовую базу.
Я не могу решить чё тут сделать можно, как отследить если загрузка прервалась?

Я пробовал так:
Код:
$movefile = "./storage/" . $filecrc; // $filecrc - md5 файла
if(copy($_FILES['upfile']['tmp_name'], $movefile))
{
} else {
die;
   }
$filelist = fopen("./files.txt","a+");
fwrite($filelist, "информация о файле и т.д...");
fclose($filelist);
Но всё-равно запись в файл происходит, и он кладётся в директорию storage повреждённым, то есть скока удалось загрузить...

Если кто знает как устранить эту ошибку, то напшите способ!!!
 
Ответить с цитированием

  #2  
Старый 18.01.2008, 07:44
Аватар для NNNS
NNNS
Познающий
Регистрация: 26.05.2007
Сообщений: 63
Провел на форуме:
550386

Репутация: 86
Отправить сообщение для NNNS с помощью ICQ
По умолчанию

попробуй так
PHP код:
set_time_limit(0);

...

$movefile "./storage/" $filecrc// $filecrc - md5 файла
if(copy($_FILES['upfile']['tmp_name'], $movefile))
{
    
$filelist fopen("./files.txt","a+");
    
fwrite($filelist"информация о файле и т.д...");
    
fclose($filelist);

else 
{
    die();

 
Ответить с цитированием

  #3  
Старый 18.01.2008, 07:59
Аватар для Nightmarе
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


Отправить сообщение для Nightmarе с помощью ICQ
По умолчанию

Цитата:
Сообщение от NNNS  
попробуй так
PHP код:
set_time_limit(0);

...

$movefile "./storage/" $filecrc// $filecrc - md5 файла
if(copy($_FILES['upfile']['tmp_name'], $movefile))
{
    
$filelist fopen("./files.txt","a+");
    
fwrite($filelist"информация о файле и т.д...");
    
fclose($filelist);

else 
{
    die();

Пробовал. Ничё не изменилось.
 
Ответить с цитированием

  #4  
Старый 18.01.2008, 11:04
Аватар для groundhog
groundhog
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме:
2238549

Репутация: 1318


Отправить сообщение для groundhog с помощью ICQ
По умолчанию

Nightmarе, пробуй не пробуй, а это ограничение задаётся в настройках PHP. В настройках стоит ограничение на максимальный размер загружаемых на сервер файлов. Думаю, что в твоём случае этот размер установлен в 60Мб. Значения, которые за это отвечатют - upload_max_filesize и post_max_size (в php.ini). Значения этих параметров не могут изменяться с помощью функции ini_set() внутри скрипта PHP. Как вариант могу посоветовать использование файла .htaccess в корне твоего DocumentRoot со следующим содержанием (обрати внимание, что PHP должен работать как модуль!!!):

Код:
<IfModule mod_php4.c>
php_value upload_max_filesize 50M
php_value post_max_size 50M
</IfModule>
или

Код:
<IfModule mod_php5.c>
php_value upload_max_filesize 128M
php_value post_max_size 128M
</IfModule>
Ну и, конечно, не забывай использовать в аплоаде set_time_limit(0). Что же касается ошибок, возникающих из-за размера файла, то почему бы тебе не анализировать поле $_FILES['upfile']['error']? Оно отлично от нуля при возникновении ошибок...
 
Ответить с цитированием

  #5  
Старый 18.01.2008, 12:57
Аватар для Nightmarе
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


Отправить сообщение для Nightmarе с помощью ICQ
По умолчанию

Цитата:
Сообщение от groundhog  
Nightmarе, пробуй не пробуй, а это ограничение задаётся в настройках PHP. В настройках стоит ограничение на максимальный размер загружаемых на сервер файлов. Думаю, что в твоём случае этот размер установлен в 60Мб. Значения, которые за это отвечатют - upload_max_filesize и post_max_size (в php.ini). Значения этих параметров не могут изменяться с помощью функции ini_set() внутри скрипта PHP. Как вариант могу посоветовать использование файла .htaccess в корне твоего DocumentRoot со следующим содержанием (обрати внимание, что PHP должен работать как модуль!!!):

Код:
<IfModule mod_php4.c>
php_value upload_max_filesize 50M
php_value post_max_size 50M
</IfModule>
или

Код:
<IfModule mod_php5.c>
php_value upload_max_filesize 128M
php_value post_max_size 128M
</IfModule>
Ну и, конечно, не забывай использовать в аплоаде set_time_limit(0). Что же касается ошибок, возникающих из-за размера файла, то почему бы тебе не анализировать поле $_FILES['upfile']['error']? Оно отлично от нуля при возникновении ошибок...
groundhog Я в курсе не только про маскимальный размер файла, я так-же знаю и про максимальный объём передачи методом post\get, с этим у меня всё в порядке.

Файл заливается в любом случае, если 100 метров или гигабайт закачать без ошибок, то всё ОК, но иногда скорость рвётся или мало ли что, закачка останавливается и недокачанный файл остаётся висеть на сервере, кроме того информация о нём ещё записывается...

Функцией $_FILES['upfile']['error'] я щас и займусь...
И ещё вопрос, может это и глупо, но можно ли как нибудь получить информацию о файле (размер или md5 сумму) не заливая его на сервер??? Кто знает, может можно...
 
Ответить с цитированием

  #6  
Старый 18.01.2008, 13:03
Аватар для groundhog
groundhog
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме:
2238549

Репутация: 1318


Отправить сообщение для groundhog с помощью ICQ
По умолчанию

Цитата:
Функцией $_FILES['upfile']['error'] я щас и займусь...
Это не функция, это всего-лишь элемент ассоциативного массива, в котором сохраняется статус операции аплоада.

Цитата:
И ещё вопрос, может это и глупо, но можно ли как нибудь получить информацию о файле (размер или md5 сумму) не заливая его на сервер??? Кто знает, может можно...
Стандартными средствами нет. Но вот если ты организуешь HEAD запрос к удалённому файлу, и из полученных хидеров ответа выцепишь заголовок Content-Length, то определишь размер файла с точностью до байта. Такой вариант устраивает?
 
Ответить с цитированием

  #7  
Старый 18.01.2008, 13:06
Аватар для Nightmarе
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


Отправить сообщение для Nightmarе с помощью ICQ
По умолчанию

Попробовал...
$_FILES['upfile']['error'] - возвращает 0

set_time_limit(0); - что с ним что без него всё одинаково
 
Ответить с цитированием

  #8  
Старый 18.01.2008, 13:08
Аватар для Nightmarе
Nightmarе
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме:
5749763

Репутация: 1680


Отправить сообщение для Nightmarе с помощью ICQ
По умолчанию

Цитата:
Сообщение от groundhog  
Такой вариант устраивает?
Конечно, если это поможет.
Можешь привести пример кода?
 
Ответить с цитированием

  #9  
Старый 18.01.2008, 13:35
Аватар для groundhog
groundhog
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме:
2238549

Репутация: 1318


Отправить сообщение для groundhog с помощью ICQ
По умолчанию

Цитата:
Можешь привести пример кода?
PHP код:
<?php

    
/**
    * Remote size fetcher function
    *
    * Retrieve the size of remote file
    * from it's Content-Length header at
    * HEAD method request
    *
    * @param  string URL of remote file
    * @return mixed  double - the size of
    *                remote file in bytes,
    *                or false at failed
    *                operation.
    */

    
function getRemoteFileSize ($remoteUrl) {
        
$urlData parse_url($remoteUrl);

        if (!isset(
$urlData["host"])) return false;
        if (!isset(
$urlData["port"])) $urlData["port"] = 80;
        if (!isset(
$urlData["path"])) $urlData["path"] = "/";

        
$socket fsockopen($urlData["host"], $urlData["port"], $errno$errstr60);
        if (!
$socket) return false;

        
$resource $urlData["path"];
        if (isset(
$urlData["query"])) $resource .= "?{$urlData["query"]}";

        
$sendData  "HEAD {$resource} HTTP/1.1\r\n";
        
$sendData .= "Host: {$urlData["host"]}\r\n";
        
$sendData .= "User-Agent: DaMaGeLaB file fetcher\r\n";
        
$sendData .= "Accept: */*\r\n";
        
$sendData .= "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\n";
        
$sendData .= "Pragma: no-cache";
        
$sendData .= "Connection: Close\r\n\r\n";

        
$ret fwrite($socket$sendData);
        if (!
$ret) return false;

        
$buffer "";
        while (!
feof($socket)) {
            
$buffer .= fgets($socket8192);
        }

        
fclose($socket);

        list(
$headers$content) = preg_split("/\r\n\r\n/"$buffer2);

        if (
strlen($headers) <= 0) return false;

        
$httpCode intval(substr($headers93));
        if (
$httpCode != 200) return false;

        if (!
preg_match("/Content\-Length: (\d+)\r\n/i"$headers$matches))
            return 
false;

        return 
doubleval($matches[1]);
    }



    
$ret getRemoteFileSize ("http://ya.ru");

    if (!
$ret) exit("Couldn't get remote file size");

    
printf("Size of remote file is: %s bytes"$ret);

?>

Последний раз редактировалось groundhog; 18.01.2008 в 13:39..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
Что такое Php? PAPA212 Болталка 13 28.12.2007 20:44
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ