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

Форум PHP

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

 

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

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

тема: Определение размера файла
 
 автор: Buhen   (11.08.2007 в 17:34)   письмо автору
 
 

Я использую нижу приведенный код для определения размера файла на сервере. У меня выводятся данные о файле из базы данных и полный путь к файлу составляется. Но проблема в том что при 1 файле в бд размер файла определяется а уже при выводе 2 записях уже размер определяется токо одного файла. Вот код:
<?
function getRemoteFileSize($url){  
   
$parse parse_url($url);  
   
$host $parse['host'];  
   
$fp = @fsockopen ($host80$errno$errstr20);  
   if(!
$fp){   
     
$ret 0;   
   }else{  
     
$host $parse['host'];  
     
fputs($fp"HEAD ".$url." HTTP/1.1\r\n");  
     
fputs($fp"HOST: ".$host."\r\n");   
     
fputs($fp"Connection: close\r\n\r\n");  
     
$headers "";  
     while (!
feof($fp)){   
       
$headers .= fgets ($fp128);   
     }  
     
fclose ($fp);  
     
$headers strtolower($headers);  
     
$array preg_split("|[\s,]+|",$headers);  
     
$key array_search('content-length:',$array);  
     
$ret $array[$key+1];  
   }    
   if(
$array[1]==200) return $ret;  
   else return -
1*$array[1];  
 }  
 
$url "http://www.xxx.ru/files/$category/$file";  
 
$size getRemoteFileSize($url);  
 if(
$size==0) echo "Не могу соединиться";  
 elseif(
$size<0) echo "Ошибка. Код ответа HTTP: ".(-1*$size);  
 else 
$size round($size/1024);   echo "(".$size." kbytes)";
?>

Буду благодарен кто поможет!

   
 
 автор: Trianon   (11.08.2007 в 20:52)   письмо автору
 
   для: Buhen   (11.08.2007 в 17:34)
 

что-то я не понял... Вы размер файла с собственного сервера так выковыриваете?

   
 
 автор: Buhen   (12.08.2007 в 09:16)   письмо автору
 
   для: Trianon   (11.08.2007 в 20:52)
 

Да я так определяю рамер файла находящегося на сервере. В чем все таки проблема?

   
 
 автор: Buhen   (12.08.2007 в 10:01)   письмо автору
 
   для: Buhen   (12.08.2007 в 09:16)
 

Все код мой работает только почему-то файл размером 2.6 мб он отказывает загружать на сервер а файлы размером 30-300кб он свободно загружает. Срабатывает условие(Вы не выбрали файл для загрузки) Хотя я его выбрал. Хотя трафик идет и он пытается его загрузить.
Вот сам код:

<?
$category 
$_POST['category'];
if(!empty(
$_FILES['filename']['tmp_name']))
        {
            
    
// Извлекаем из имени файла расширение
    
$ext strtolower(strrchr($_FILES['filename']['name'], ".")); 
    
// Разрешаем загружать файлы только определённого форматм
    
$extentions = array(".rar",".zip",".exe",".msi");
    
// Проверяем входит ли расширение файла
    // в список зарегистрированных
    
if(in_array($ext$extentions))
    {

$query_add "INSERT INTO downloads 
(download_file_name, download_file, 
description_file, category_file, 
url_programm, author, version_file, cat_id, 
downloads_file, insert_date) VALUES ('"
.
addslashes($_POST['download_file_name']).
"', '".addslashes($_FILES['filename']
[
'name'])."', '".
addslashes($_POST['description_file'])."', 
'"
.addslashes($_POST['category'])."', '".
addslashes($_POST['url_programm'])."', '".
addslashes($_SESSION['login'])."', '".
addslashes($_POST['version_file'])."', '".
addslashes($_GET['cat_id'])."', '0', \"".
date("Y:m:d H:i")."\")";
            
mysql_query ($query_add);
            if (
mysql_errno() != 0)
            {
              echo 
"<p class='navig'>Произошла ошибка при добавлении файла";
            }
            else
            {
             echo 
"";
          }

      
// Сохраняем файл в текущей директории
      
if(copy($_FILES['filename']
[
'tmp_name'], "files/$category/".
$_FILES['filename']['name']))
      {
        echo 
"<p class='navig'>Файл успешно 
загружен - <a href=files/
$category/".
$_FILES['filename']['name'].">".
$_FILES['filename']['name']."</a>";
      }
    }
    else
    {
      
// Файл с незарегистрированным расширением
      
echo "<p class='navig'>Разрешена 
загрузка только заархивированных файлов"
;
    }
    
    }
        else
    {
        echo 
"<p class='navig'>Вы не 
выбрали файл для загрузки"
;
    }
?>

   
 
 автор: cheops   (12.08.2007 в 10:26)   письмо автору
 
   для: Buhen   (12.08.2007 в 09:16)
 

>Да я так определяю рамер файла находящегося на сервере. В чем все таки проблема?
На том же сервере, где находится скрипт или на удалённом сервере?

   
 
 автор: Buhen   (12.08.2007 в 10:39)   письмо автору
 
   для: cheops   (12.08.2007 в 10:26)
 

На том же сервере! Я понял вроде в чем проблема. Все было в том что полное название файла с расширением я заносил в бд но не обрабатывал функцией strtolower а копировался файл уже с названием обработанным strtolower. Но возникла еще одна проблема. Если закачивать файл в названии котором есть пробелы между словами (не подчеркивания) то в бд заносится токо первое слово названия файла. Как решить проблему?

   
 
 автор: cheops   (12.08.2007 в 11:22)   письмо автору
 
   для: Buhen   (12.08.2007 в 10:39)
 

>На том же сервере!
Хм... а почему бы тогда не воспользоваться классической функцией filesize()

>Если закачивать файл в названии котором есть пробелы между словами (не подчеркивания) то
>в бд заносится токо первое слово названия файла. Как решить проблему?
Вероятно у вас где-то используется атрибут value без кавычек "" - поэтому воспринимается всё, что до пробела.

   
 
 автор: Buhen   (12.08.2007 в 11:32)   письмо автору
 
   для: cheops   (12.08.2007 в 11:22)
 

А какая разница между моим кодом и функцией filesize? Какая лучше?

   
 
 автор: Trianon   (12.08.2007 в 11:51)   письмо автору
 
   для: Buhen   (12.08.2007 в 11:32)
 

это примерно как сперва купить холодильник, а потом идти опять в магазин с целью замерить его габариты.

Если содержимое файла хранится у Вас с БД, размер поля можно получить, применив подобный запрос SELECT LENGTH(filebody) FROM tbl WHERE file_id = $file_id

   
 
 автор: Trianon   (12.08.2007 в 11:59)   письмо автору
 
   для: Buhen   (12.08.2007 в 11:32)
 

С формальной точки зрения, Ваш код создает дополнительным запросом к apache и php двойную нагрузку на сервер.
А фактической - он просто дико выглядит. Поскольку Вы пытаетесь работать со своей машиной средствами для работы с данными на удаленных серверах .

   
 
 автор: Buhen   (12.08.2007 в 12:04)   письмо автору
 
   для: Trianon   (12.08.2007 в 11:59)
 

Файл хранится там где находится мой сайт(не в БД) и определяю я размер файла на моем сайт как я понял лучше использовать функцию filesize

   
 
 автор: Unkind   (12.08.2007 в 12:14)   письмо автору
 
   для: Buhen   (12.08.2007 в 12:04)
 

Ну вообще-то Вашим кодом Вы измеряете размер исходящего документа, а filesize() - размер файла.

   
 
 автор: Trianon   (12.08.2007 в 12:42)   письмо автору
 
   для: Buhen   (12.08.2007 в 12:04)
 

Тогда - конечно.

   
Rambler's Top100
вверх

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