|
|
|
| Здравствуйте форумчане!
Помогите кто чем может так сказать.
Нужно передать картинку с сервера 1 на сервер2, соответственно везде поддерживается php.
условия:
на сервере1 есть кнопка "Выберите файл" сервер1 сжимает картинку до нужных размеров и пересылает её серверу №2 (принципе, не важно где будет картинка сжиматься). При этом, сервер2 возвращает ссылку серверу1, где храниться картинка.
Можно ли такое реализовать? | |
|
|
|
|
|
|
|
для: gkirill
(07.10.2012 в 16:30)
| | В самом простом варианте можно воспользоваться обычными файловыми функциями (fopen(), copy() и т.п.), которые работают с сетевыми путями, кроме этого можно воспользоваться передачей файлов по протоколу FTP, если такой путь допустим. Помимо этого имеется возможность воспользоваться сокетами или CURL. | |
|
|
|
|
|
|
|
для: cheops
(07.10.2012 в 19:05)
| | Спасибо за ответ. Жалко что вы эту тему не включили в книгу "PHP 5/6 третье издание". А можно пожалуйста синтаксис или пример кода? | |
|
|
|
|
|
|
|
для: gkirill
(07.10.2012 в 22:44)
| | Я вот так делал:
$kod = file_get_contents('http://www.psy.info/dell.php');
|
| |
|
|
|
|
|
|
|
для: Владимир55
(08.10.2012 в 00:04)
| | a что в файлике dell.php??? если не секрет? | |
|
|
|
|
|
|
|
для: gkirill
(08.10.2012 в 00:26)
| | Этого я уже не помню, но это и несущественно: передастся результат исполнения файла dell.php, а не сам файл.
Соответственно, удобнее всего передавать текстовые файлы, архивы, видео, аудио и т.п. | |
|
|
|
|
|
|
|
для: Владимир55
(08.10.2012 в 10:16)
| | Владимир, не, это мне не подойдет.
Дело в том, что на первом сервере я храню все скрипты, а на втором (там бесплатный хостинг и места побольше) предполагается хранение картинок (фотографий в моем случае. которые загрузили пользователи.) Вот мне и нужен скрипт, чтобы принял картинку, сохринил её и отправил мне ссылку на картинку, которая непосредственно уйдет в mysql | |
|
|
|
|
|
|
|
для: gkirill
(08.10.2012 в 15:19)
| | На бесплатном сервере имеется FTP-доступ? Можно им воспользоваться? | |
|
|
|
|
|
|
|
для: cheops
(09.10.2012 в 10:47)
| | Имеется и пользоваться можно. | |
|
|
|
|
|
|
|
для: 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, и ответ "вторичного сервера" клиенту (загружено) отправлять на "первичный сервер" формой отправляющей основной контент. Вот в этом случае, уже "вторичный север" может определять путь к файлу, но должна быть некая синхронизация при этом. | |
|
|
|
|
|
|
|
для: confirm
(09.10.2012 в 22:54)
| | Конечно можно обработать на 2-ом сервере. | |
|
|
|
|
|
|
|
для: gkirill
(09.10.2012 в 23:51)
| | Значит определяйтесь с формированием путей (кто и по каким критериям их определяет, создает папки, и с синхронизацией), ищите в сети информацию о загрузке файлов методом Ajax (учтите только, что не ajax непосредственно этим занимается), изучайте код этого, и можете использовать для своих нужд. Не сможете осилить, значит ftp/http на вторичный сервер и обрабатывайте там, но пути в этом случае определять не он должен. | |
|
|
|