| |
|
|
| | Я использую нижу приведенный код для определения размера файла на сервере. У меня выводятся данные о файле из базы данных и полный путь к файлу составляется. Но проблема в том что при 1 файле в бд размер файла определяется а уже при выводе 2 записях уже размер определяется токо одного файла. Вот код:
<?
function getRemoteFileSize($url){
$parse = parse_url($url);
$host = $parse['host'];
$fp = @fsockopen ($host, 80, $errno, $errstr, 20);
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 ($fp, 128);
}
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)";
?>
|
Буду благодарен кто поможет! | |
| |
|
|
| |
|
|
| |
для: Buhen
(11.08.2007 в 17:34)
| | | что-то я не понял... Вы размер файла с собственного сервера так выковыриваете? | |
| |
|
|
| |
|
|
| |
для: Trianon
(11.08.2007 в 20:52)
| | | Да я так определяю рамер файла находящегося на сервере. В чем все таки проблема? | |
| |
|
|
| |
|
|
| |
для: 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'>Вы не
выбрали файл для загрузки";
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: Buhen
(12.08.2007 в 09:16)
| | | >Да я так определяю рамер файла находящегося на сервере. В чем все таки проблема?
На том же сервере, где находится скрипт или на удалённом сервере? | |
| |
|
|
| |
|
|
| |
для: cheops
(12.08.2007 в 10:26)
| | | На том же сервере! Я понял вроде в чем проблема. Все было в том что полное название файла с расширением я заносил в бд но не обрабатывал функцией strtolower а копировался файл уже с названием обработанным strtolower. Но возникла еще одна проблема. Если закачивать файл в названии котором есть пробелы между словами (не подчеркивания) то в бд заносится токо первое слово названия файла. Как решить проблему? | |
| |
|
|
| |
|
|
| |
для: Buhen
(12.08.2007 в 10:39)
| | | >На том же сервере!
Хм... а почему бы тогда не воспользоваться классической функцией filesize()
>Если закачивать файл в названии котором есть пробелы между словами (не подчеркивания) то
>в бд заносится токо первое слово названия файла. Как решить проблему?
Вероятно у вас где-то используется атрибут value без кавычек "" - поэтому воспринимается всё, что до пробела. | |
| |
|
|
| |
|
|
| |
для: cheops
(12.08.2007 в 11:22)
| | | А какая разница между моим кодом и функцией filesize? Какая лучше? | |
| |
|
|
| |
|
|
| |
для: Buhen
(12.08.2007 в 11:32)
| | | это примерно как сперва купить холодильник, а потом идти опять в магазин с целью замерить его габариты.
Если содержимое файла хранится у Вас с БД, размер поля можно получить, применив подобный запрос SELECT LENGTH(filebody) FROM tbl WHERE file_id = $file_id | |
| |
|
|
| |
|
|
| |
для: Buhen
(12.08.2007 в 11:32)
| | | С формальной точки зрения, Ваш код создает дополнительным запросом к apache и php двойную нагрузку на сервер.
А фактической - он просто дико выглядит. Поскольку Вы пытаетесь работать со своей машиной средствами для работы с данными на удаленных серверах . | |
| |
|
|
| |
|
|
| |
для: Trianon
(12.08.2007 в 11:59)
| | | Файл хранится там где находится мой сайт(не в БД) и определяю я размер файла на моем сайт как я понял лучше использовать функцию filesize | |
| |
|
|
| |
|
|
| |
для: Buhen
(12.08.2007 в 12:04)
| | | Ну вообще-то Вашим кодом Вы измеряете размер исходящего документа, а filesize() - размер файла. | |
| |
|
|
| |
|
|
| |
для: Buhen
(12.08.2007 в 12:04)
| | | Тогда - конечно. | |
| |
|
|