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

Форум PHP

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

 

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

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

тема: передача файла с сервера 1 на сервер2
 
 автор: gkirill   (07.10.2012 в 16:30)   письмо автору
 
 

Здравствуйте форумчане!
Помогите кто чем может так сказать.
Нужно передать картинку с сервера 1 на сервер2, соответственно везде поддерживается php.
условия:
на сервере1 есть кнопка "Выберите файл" сервер1 сжимает картинку до нужных размеров и пересылает её серверу №2 (принципе, не важно где будет картинка сжиматься). При этом, сервер2 возвращает ссылку серверу1, где храниться картинка.


Можно ли такое реализовать?

  Ответить  
 
 автор: cheops   (07.10.2012 в 19:05)   письмо автору
 
   для: gkirill   (07.10.2012 в 16:30)
 

В самом простом варианте можно воспользоваться обычными файловыми функциями (fopen(), copy() и т.п.), которые работают с сетевыми путями, кроме этого можно воспользоваться передачей файлов по протоколу FTP, если такой путь допустим. Помимо этого имеется возможность воспользоваться сокетами или CURL.

  Ответить  
 
 автор: gkirill   (07.10.2012 в 22:44)   письмо автору
 
   для: cheops   (07.10.2012 в 19:05)
 

Спасибо за ответ. Жалко что вы эту тему не включили в книгу "PHP 5/6 третье издание". А можно пожалуйста синтаксис или пример кода?

  Ответить  
 
 автор: Владимир55   (08.10.2012 в 00:04)   письмо автору
 
   для: gkirill   (07.10.2012 в 22:44)
 

Я вот так делал:

$kod = file_get_contents('http://www.psy.info/dell.php'); 

  Ответить  
 
 автор: gkirill   (08.10.2012 в 00:26)   письмо автору
 
   для: Владимир55   (08.10.2012 в 00:04)
 

a что в файлике dell.php??? если не секрет?

  Ответить  
 
 автор: Владимир55   (08.10.2012 в 10:16)   письмо автору
 
   для: gkirill   (08.10.2012 в 00:26)
 

Этого я уже не помню, но это и несущественно: передастся результат исполнения файла dell.php, а не сам файл.

Соответственно, удобнее всего передавать текстовые файлы, архивы, видео, аудио и т.п.

  Ответить  
 
 автор: gkirill   (08.10.2012 в 15:19)   письмо автору
 
   для: Владимир55   (08.10.2012 в 10:16)
 

Владимир, не, это мне не подойдет.
Дело в том, что на первом сервере я храню все скрипты, а на втором (там бесплатный хостинг и места побольше) предполагается хранение картинок (фотографий в моем случае. которые загрузили пользователи.) Вот мне и нужен скрипт, чтобы принял картинку, сохринил её и отправил мне ссылку на картинку, которая непосредственно уйдет в mysql

  Ответить  
 
 автор: cheops   (09.10.2012 в 10:47)   письмо автору
 
   для: gkirill   (08.10.2012 в 15:19)
 

На бесплатном сервере имеется FTP-доступ? Можно им воспользоваться?

  Ответить  
 
 автор: gkirill   (09.10.2012 в 23:50)   письмо автору
 
   для: cheops   (09.10.2012 в 10:47)
 

Имеется и пользоваться можно.

  Ответить  
 
 автор: confirm   (09.10.2012 в 22:54)   письмо автору
 
   для: gkirill   (08.10.2012 в 15:19)
 

>мне и нужен скрипт, чтобы принял картинку, сохринил её и отправил мне ссылку на картинку, которая непосредственно уйдет в mysql

Не странное ли желание? По логике вещей, ваш "первичный сервер" должен определять, что загружает пользователь и куда это должно быть помещено (путь), то есть он определяет ссылку, а не "вторичный сервер". Значит вы уже знаете, что нужно поместить в базу. Единственное, что мешает этому, так это отсутствие подтверждения от "вторичного сервера" о получении изображения. Именно это он должен вам возвращать, а не ссылку.

Передать можно по ftp, и даже по http-протоколу. Например, по http-протоколу, используя контекст (для версии РНР не ниже 5.2.10):
<?
$post 
http_build_query(
    array(
        
'path'=> 'exmpl'//параметр определяющий путь на вторичном сервере
        //может не указываться явно, а служить только ссылкой на него 
        
'img' => base64_encode(file_get_contents('img.jpg')) //где img.jpg
        //это полученное изображение, обработанное, если необходимо
    
)
);
//опции контекста
$options = array('http' =>
    array(
        
'method'  => 'POST',
        
'header'  => 'Content-type: application/x-www-form-urlencoded',
        
'content' => $post
    
)
);
//отправляем на вторичный сервер и получаем его ответ
$context stream_context_create($options);
$result file_get_contents('http://test/http.php'false$context);
echo 
$result;

//это принимающий код на вторичном сервере
if(isset($_POST['img'])) { //это проверка для примера, может быть иная, по условиям
   
$send 400;
   if(
$im imagecreatefromstring(base64_decode($_POST['img']))) {
      
file_put_contents($_POST['path'].'/img.jpg'base64_decode($_POST['img']));
      
$send 200;
   }
   echo 
$send//ответ вторичного сервера об удачном приеме файла


Тоже самое, используя контекст, можно отправить и по ftp протоколу, либо воспользоваться ftp-функциями.

Можно вообще не отправлять на "первичный сервер" изображения, а сразу на "вторичный", и обрабатывать их там, если это возможно. При этом нужно использовать Ajax, и ответ "вторичного сервера" клиенту (загружено) отправлять на "первичный сервер" формой отправляющей основной контент. Вот в этом случае, уже "вторичный север" может определять путь к файлу, но должна быть некая синхронизация при этом.

  Ответить  
 
 автор: gkirill   (09.10.2012 в 23:51)   письмо автору
 
   для: confirm   (09.10.2012 в 22:54)
 

Конечно можно обработать на 2-ом сервере.

  Ответить  
 
 автор: confirm   (09.10.2012 в 23:56)   письмо автору
 
   для: gkirill   (09.10.2012 в 23:51)
 

Значит определяйтесь с формированием путей (кто и по каким критериям их определяет, создает папки, и с синхронизацией), ищите в сети информацию о загрузке файлов методом Ajax (учтите только, что не ajax непосредственно этим занимается), изучайте код этого, и можете использовать для своих нужд. Не сможете осилить, значит ftp/http на вторичный сервер и обрабатывайте там, но пути в этом случае определять не он должен.

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

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