Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как загрузить файл на сервер с url-а

312
08 августа 2007 года
dead_star
392 / / 26.11.2006
вопрос в теме...
я умею загружать на сервер файлы при помощи поля [COLOR="DarkGreen"]input file[/COLOR],
но мне нужно еще реализовать загруску с урлы.
пример того что нужно реализовать
239
09 августа 2007 года
Dolonet
1.7K / / 20.05.2000
Какого формата файл?
Вообще можно это сделать так:

1) через system('wget ...');
2) http://www.php.net/manual/en/function.file-get-contents.php
3) http://www.php.net/manual/en/function.file.php
4) ...
312
09 августа 2007 года
dead_star
392 / / 26.11.2006
в примере мне необходимо копировать файлы типа "image",
но может возникнуть необходимость в копировании файлов другого типа.

первый, предложеный вариант немножко непонял.

со вторым и третим помойму проще уж так
 
Код:
$_POST['url_file'] = 'http://www.codenet.ru/images/logo.gif';
...
if (!copy($_POST['url_file'], $file_name)){
 echo "Не удается копировать файл. Попробуйте еще раз.";
} else {
 copy($_POST['url_file'], $file_name);
 echo "Копирование успешно завершено";
}

и остается еще одна проблема
а как мне определить тип файла скачиваемого с url,
мне же не все подряд нужно
239
09 августа 2007 года
Dolonet
1.7K / / 20.05.2000
Тип файла можно определить по расширению файла, по его физическому началу и возвращаемым сервером headers.
312
09 августа 2007 года
dead_star
392 / / 26.11.2006
для не телепатов
Код:
<?php
$TITLE = "Загрузка файла";
if ((@!isset($_GET['up'])) && (@$_GET['up'] != 'true')){
 include("_head.php");
?>
<form enctype="multipart/form-data" action="upload_img.php?up=true" method="post">
<div style="padding:2px;font-size:8pt;">Загрузить с компьютера: <input type="text" name="url_file" style="width:200px" value="http://"></div>
<div style="padding:2px;font-size:8pt">Загрузить из интернета: <input type="file" name="userfile" style="margin-left:4px;width:206px"></div>
<input type="submit" value="Загрузить" class="button" style="width:100px;margin-left:136px">
<input type="button" value="Отмена" class="button" style="width:100px;margin-left:2px" &#111;&#110;Click="java script:window.close();"></form>
<?php
} else {
 $errorType = "";
 $error = 1;
 if (@!file_exists($_POST['url_file'])){
  $i = 1;
  // необходимо узнать расширение
  // и провести проверку
  $TPM_NAME = $_POST['url_file'];

 } elseif (@!$_POST['userfile']){
  $SIZE = @$_FILES['userfile']['size'];
  $NAME = @$_FILES['userfile']['name'];
  $TYPE = @$_FILES['userfile']['type'];
  $TPM_NAME = @$_FILES['userfile']['tmp_name'];
  // ограничение на загрузу
  if (!strstr($TYPE, "image")){
   $errorType = "К загрузке будут допущены только файлы типа - \"image\"";
   $error++;
  }
  if ($SIZE > 3145728){
   $errorType = "К загрузке будут допущены файлы объемом не более 3 Mb";
   $error++;
  }
 }
 if ($error > 1){
  include("_head.php");
?>
<form enctype="multipart/form-data" action="upload_img.php?up=true" method="post">
<?=$errorType?>
<div style="padding:2px;font-size:8pt">Загрузить с компьютера: <input type="text" name="url_file" style="width:200px" value="http://"></div>
<div style="padding:2px;font-size:8pt">Загрузить из интернета: <input type="file" name="userfile" style="margin-left:4px;width:206px"></div>
<input type="submit" value="Загрузить" class="button" style="width:100px;margin-left:136px">
<input type="button" value="Отмена" class="button" style="width:100px;margin-left:2px" &#111;&#110;Click="java script:window.close();"></form>
<?php
 } elseif (copy($TPM_NAME)){
  $bodyProperty = " &#111;&#110;Load=\"java script:setTimeout('window.location='upload_img.php';',4000);";
  include("_head.php");
?>
Не удается копировать файл. Попробуйте еще раз.
<?php
 } else {
  // узнаем раcширение
  // работает только в input file
  $i = 1;
  $type_file_save = substr($NAME, -$i);
  while(!strstr($type_file_save, '.')){
   $type_file_save = substr($NAME, -$i);
   ++$i;
  }
  // искуственно задаю расширение
  $type_file_save = '.png';
  // создаем новое имя
  $file = md5(uniqid(rand(),1));
  $file_name = "../../upload/image/".$file.$type_file_save;
  while(file_exists($file_name) != false){
   $file = md5(uniqid(rand(),1));
   $file_name = "../../upload/image/".$file.$type_file_save;
  }
  copy($TPM_NAME, $file_name);
  $bodyProperty = " &#111;&#110;Load=\"closeWinUpload('http://".$_SERVER['HTTP_HOST']."/upload/image/".$file.$type_file_save."')\"";
  include("_head.php");
?>
<script language="JavaScript">
function closeWinUpload(put){
 window.opener.document.all.fullDescription.value += '';
 window.close();
}
</script>
<br>
<input type=text value="[img=http://<?=$_SERVER['HTTP_HOST']?>/upload/image/<?=$file?><?=$type_file_save?>]" style="width:280px">
<?php
 }
}
?>
</body>
</html>

код сыро, прошу не придераться
312
09 августа 2007 года
dead_star
392 / / 26.11.2006
Цитата: Dolonet
Тип файла можно определить по расширению файла, по его физическому началу и возвращаемым сервером headers.


мне нужен headers, но ксожалению я в мануале нашел только определение у локального файла, а не файла с url.

может я плхо искал?:D

251
09 августа 2007 года
SkyMаn
1.7K / / 31.07.2007
мож прописать в поле INPUT фильтр, например на Екслель=application/vnd.ms-excel.
Можешь расширения проверять, но его конечно же можна моменять. Можешь перед загрузкой жабаскриптом поизвращаться - тоже вариант. А можешь и после загрузки средствами РНР, юзая [COLOR=blue]$_FILES['переменная']['type'][/COLOR]. Например
Цитата:
if ( $_FILES['filetoupload']['type'] != "application/msword" )
{
echo "файл не указан или не является файлом MsWord!";
}


но имхо разные броузеры по-разному МИМЕ-типы отдают, да и изменить в файле описаний мимов можно (можно вместо того же екселя бинарник прописать). Для точной уверенности можно проверять заголовки форматов загружаемых файлов и сверять, не подходят ли они требуемым файлам.

312
09 августа 2007 года
dead_star
392 / / 26.11.2006
Цитата: SkyM@n
Можешь расширения проверять, но его конечно же можна моменять. Можешь перед загрузкой жабаскриптом поизвращаться - тоже вариант. А можешь и после загрузки средствами РНР, юзая [COLOR=blue]$_FILES['переменная']['type'][/COLOR]. Например


какраз это я и зделал

можно еще воттак подправить код
и защита чуть лучше
и более читабельный

Код:
$errorType = "";
 $error = 1;
 $i = 1;
 if (!file_exists($_POST['url_file'])){
  $SIZE = ''; // необходимо узнать размер
  $NAME = $_POST['url_file'];
  $TYPE = ''; // необходимо узнать MIMI-тип
  $TPM_NAME = $_POST['url_file'];
 } elseif (@!$_POST['userfile']){
  $SIZE = @$_FILES['userfile']['size'];
  $NAME = @$_FILES['userfile']['name'];
  $TYPE = @$_FILES['userfile']['type'];
  $TPM_NAME = @$_FILES['userfile']['tmp_name'];
 }
 // узнаем рашширение
 $type_file_save = substr($NAME, -$i);
 while(!strstr($type_file_save, '.')){
  $type_file_save = substr($NAME, -$i);
  ++$i;
 }
 // проверка - сравнение MIMI-типа и расширения файла
 if (($TYPE == "image/jpeg") && ($type_file_save == '.jpg')){
 } elseif (($TYPE == "image/gif") && ($type_file_save == '.gif')){
 } elseif (($TYPE == "image/x-ms-bmp") && ($type_file_save == '.bmp')){
 } elseif (($TYPE == "image/x-png") && ($type_file_save == '.png')){
 } else {
  $errorType = "К загрузке будут допущены только файлы типа - \"image\"";
  $error++;
 }
 if ($SIZE > 3145728){
  $errorType = "К загрузке будут допущены файлы объемом не более 3 Mb";
  $error++;
 }

но опять же - как мне определить размер и тип файла загружаемого через url???

Цитата: SkyM@n
Для точной уверенности можно проверять заголовки форматов загружаемых файлов и сверять, не подходят ли они требуемым файлам.


немогу понять о чем ты говоришь? :confused:

251
09 августа 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата: dead_star
немогу понять о чем ты говоришь? :confused:


Мануально проверять стандартный формат файла, например для ЕХЕ:

Цитата:

Offset Size Description
-------------------------------------------------------------------
00 | word | "MZ" - Link file .EXE signature
02 | word | length of image mod 512
04 | word | size of file in 512 byte pages
06 | word | number of relocation items following header
-------------------------------------------------------------------


Я даж класс в нете видел на РНР для работы с ЕХЕшниками...
Так уж точно узнаешь о правильности формата :).
Имхо, чуть извращенный :) , но вариант ))

312
09 августа 2007 года
dead_star
392 / / 26.11.2006
2SkyM@n благодарю за разяснение
312
27 августа 2007 года
dead_star
392 / / 26.11.2006
еп. на левую ногу :mad: :mad: :mad:

что так сложно было кинуть ссылку на ман. headers
 
Код:
<?php
$url = 'http://www.example.com';

print_r(get_headers($url));

print_r(get_headers($url, 1));
?>

Код:
Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Sat, 29 May 2004 12:28:13 GMT
    [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
    [4] => ETag: "3f80f-1b6-3e1cb03b"
    [5] => Accept-Ranges: bytes
    [6] => Content-Length: 438
    [7] => Connection: close
    [8] => Content-Type: text/html
)

Array
(
    [0] => HTTP/1.1 200 OK
    [Date] => Sat, 29 May 2004 12:28:14 GMT
    [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
    [ETag] => "3f80f-1b6-3e1cb03b"
    [Accept-Ranges] => bytes
    [Content-Length] => 438
    [Connection] => close
    [Content-Type] => text/html
)

я тут ... веду половую жизнь со своим мозгом ... пытаясь выяснить как мне узнать свойства загружаемого файла из url???
а оказывается все решается на раз плюнуть
еперный карась. убейте меня кто ни будь
251
28 августа 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата: dead_star
еп. на левую ногу :mad: :mad: :mad:
я тут ... веду половую жизнь со своим мозгом ...
еперный карась. убейте меня кто ни будь


По таким вопросам - к модераторам или администратору)) Убъют легко))

239
28 августа 2007 года
Dolonet
1.7K / / 20.05.2000
dead_star, не хочу огорчать, но это добровольное community, а значит кто хочет, тот и отвечает. Злись на собственный мозг, с которым у тебя, вроде как, все намази.

Да, кстати, я модератор. Какой вопрос?
312
31 августа 2007 года
dead_star
392 / / 26.11.2006
Цитата: SkyM@n
но имхо разные броузеры по-разному МИМЕ-типы отдают...


совершенно точно
замеченные mime-типы картинок:
image/pjpeg (иногда отдает IE вместо image/jpeg)
image/jpeg
image/jpg
image/gif
image/x-ms-bmp
image/bmp
image/x-png (иногда отдает IE вместо image/png)
image/png
PS хорошо хоть gif всегда одинаковый :)

Цитата: SkyM@n
да и изменить в файле описаний мимов можно (можно вместо того же екселя бинарник прописать).


на такой случай существует сея конструкция

 
Код:
if (strcasecmp($_FILES['userfile']['type'],'image/jpeg')){
 echo "Несоответствует на бинарном уровне";
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог