Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Загрузка изображения с сайта PHP (https://javascript.ru/forum/server/69374-zagruzka-izobrazheniya-s-sajjta-php.html)

Sonya 18.06.2017 16:11

Загрузка изображения с сайта PHP
 
Здравствуйте! Подскажите, пожалуйста, загружаю картинки с сайта с помощью:
$link = "http://site.ru/img.gif";
  $file = file_get_contents($link);
  file_put_contents("site.jpg", $file);

Как сделать, чтобы значение переменной $link бралось из текстового файла?

laimas 18.06.2017 16:31

Цитата:

Сообщение от Sonya
чтобы значение переменной $link бралось из текстового файла

Чем этот вопрос/задача отличается от недавней вашей темы о бане?

Sonya 18.06.2017 16:42

Пробовала, не получилось, сейчас сделала так:
$file = file_get_contents('file.txt');
copy($file,"site.jpg");

laimas 18.06.2017 16:53

$file = file_get_contents('file.txt'); - а если там несколько путей будет прописано? А если если и один, но в конце есть пробел и т.п.?

Что у вас за сайт, в котором куча разного распихана по папкам и файлам?

Sonya 18.06.2017 17:03

Цитата:

а если там несколько путей будет прописано? А если если и один, но в конце есть пробел и т.п.?
Путь будет только один, пробела не может быть, т.к., такой путь система не примет (проверяется корректность ответа, при добавление ссылки, если корректно, то записывается, если нет, то нет, возвращает на исправление). Файлы одноразовые, отрабатывают и удаляются, поэтому не использую БД.

laimas 18.06.2017 17:16

Если в файле записан один путь и корректный, то все будет работать. Может возникать ошибка при такой операции, если обертка URL не поддерживает перезапись существующих файлов.

Проверьте что возвращают функции, это же несложно сделать выводом на экран.

Цитата:

Сообщение от Sonya
Файлы одноразовые, отрабатывают и удаляются, поэтому не использую БД.

А БД, что исключительно для вечного? Кроме того есть и сессия.

Sonya 18.06.2017 17:32

У меня сейчас работает. если допущен пробел в начале, то система не принимает (хотя можно и обрезать), а если в конце, то там хоть три пробела - все равно работает.
Цитата:

Может возникать ошибка при такой операции, если обертка URL не поддерживает перезапись существующих файлов.
читала, то же самое по мануалу, но до конца не поняла, это же на "моей стороне" у меня путь к файлу не является URL.
А что есть более надежный вариант?

laimas 18.06.2017 17:41

Цитата:

Сообщение от Sonya
если допущен пробел в начале, то система не принимает (хотя можно и обрезать), а если в конце, то там хоть три пробела - все равно работает

Не надо надеяться на авось, есть trim().

Цитата:

Сообщение от Sonya
у меня путь к файлу не является URL

А это тогда как понять - http://site.ru/img.gif? Если вы таким образом копируете свои же файлы, то это не есть хорошо, ибо это требует открытия соединения, что есть дополнительные расходы.

Цитата:

Сообщение от Sonya
читала, то же самое по мануалу, но до конца не поняла

Читайте о настройках, будет просветление. )

Sonya 18.06.2017 17:49

Цитата:

Не надо надеяться на авось, есть trim().
, trim() так я его и имела ввиду, написав "(хотя можно и обрезать)".
Цитата:

http://site.ru/img.gif
, вот это и не поняла, по мануалу, пишут о пути к целевому, а не исходному файлу, А как избежать, любых "подводных камней", есть такой вариант?

laimas 18.06.2017 17:59

Цитата:

Сообщение от Sonya
вот это и не поняла, по мануалу, пишут о пути к целевому, а не исходному файлу

Дока:

bool copy ( string $source , string $dest [, resource $context ] )

Копирует файл source в файл с именем dest.

Список параметров

source - путь к исходному файлу (что копируем).

dest - путь к целевому файлу. Если dest является URL, то операция копирования может завершиться ошибкой, если обертка URL не поддерживает перезаписывание существующих файлов (куда копируем).

То есть и об источнике, и о цели все написано.

Sonya 18.06.2017 18:22

Именно так я и поняла. dest - куда копируем, т.е. на "моей стороне" (куда я копирую себе). Все копируется, значит обертка поддерживает перезаписывание, т.к. все работает.

laimas 18.06.2017 18:31

Цитата:

Сообщение от Sonya
Все копируется, значит обертка поддерживает перезаписывание

Это по отношению к dest, то есть когда этот путь является URL. У вас это локальный путь и при уже наличии файла он будет перезаписан без всяких предупреждений. Ошибка записи может возникать если нет прав на запись у целевой папки.

Sonya 18.06.2017 18:57

Да, я поняла. Спасибо.


Часовой пояс GMT +3, время: 15:58.