Иногда возникает задача периодически скачивать файл или страницу с удалённого сервера и сохранять её в определённую папку. При этом использовать bash-скрипт не всегда возможно.
Вопрос решается следующим образом:
Создайте файл с именем download.php и вот таким содержимым (пример скачивает somefile.xml и копирует его в папку сайта /xml/):
<?php exec ('wget -O somefile.xml -x http://www.example.com/somefile.xml'); exec ('mv somefile.xml ./xml/'); ?>
В этом скрипте,
- somefile.xml — имя, с которым файл будет сохраняться после скачивания (если такой файл уже есть — он будет перезаписан)
- http://www.example.com/somefile.xml — ссылка на скачиваемый файл
Целевая папка должна быть создана в папке сайта! Если этого не сделать — скрипт будет возвращать ошибку!
В крон же добавляется задача вот такого вида:
/usr/local/bin/php -f /home/accountname/site.com/www/download.php
Обратите внимание, что часть /usr/local/bin/php — может отличаться и зависит от пути к интерпретатору php на конкретном сервере!
спасибо, если бы знали сколько я это искал
Всегда рады помочь!
Вопрос, а можно ли загрузить файл на сайт при помощи cron по расписанию с удаленного ftp?
Почему бы и нет?
Создаем файл, например, с именем download.sh и пишем в него:
, где server.com - адрес или IP удаленного FTP-сервера
username - имя пользователя FTP
ftppassword - пароль от него же
/path/to/remote/folder/ - путь к папке на FTP-сервере, где лежит файл
filename.ext - имя скачиваемого файла
/path/to/save/folder/localfilename.ext путь к папке куда нужно сохранить файл и его имя на новом месте
Потом добавляем его в кронтаб как обычно (описано в заметке)
Спасибо, попробую.
Подправил код в комментарии. Почему-то встроенный редактор отказался его в начале отформатировать по-людски.
Подскажите пожалуйста, а как с помощью этого скрипта скопировать файл на одном сайте и перенести его на другой ? Оба сайта находятся на одном сервере.
Если файл один (например, с именем somefile.ext), то сработает что-то вроде
exec ('cp /путь/к/файлу/somefile.ext /путь/к/папке/назначения/somefile.ext');
Само собой, будет проще если провайдер дает доступ по ssh.
Тогда подключаетесь к консоли по ssh и выполняете
cp /путь/к/файлу/somefile.ext /путь/к/папке/назначения/somefile.ext
Сделал вот так, но не срабатывает
Какая ошибка получается?
Здравствуйте! Подскажите, а если с одного и того же FTP сервера необходимо 2 папки скачать и 2 файла из директории, то какой будет пример файла download.sh, приведите пожалуйста. Благодарю!
Можно просто заменить конструкцию
wget -O somefile.xml -x http://www.example.com/somefile.xml
на
wget -i /путь/к/списку/список.txt
и в самом «список.txt» задать список скачиваемых УРЛов в виде
http://www.example.com/somefile1.xml
http://www.example.com/somefile2.xml
http://www.example.com/somefile3.xml
и т.д.
Добрый день, нужна помощь.
Перерыл множество форумов, задача так и не решилась.
Есть скрипт php который парсит мейл и сохраняет mp3.
В ручную запуск скрипта из консоли — сохраняет файлы.
Запуск этого же скрипта из cron — не сохраняет, но в логах пишет что сохранил.
Вот сам крон:
*/5 * * * * /usr/bin/php -f /ftp/save_att_mosauto.php >> /ftp/cronlog.log 2>&1
Может быть причина в том что при запуске из консоли скрипт выпоняется от имени одного пользователя, а в кроне — от другого.
Второй важный нюанс — папка в которой он запускается.
Попробуйте так.
*/5 * * * * cd /путь/к/папке/скрипта/; /usr/bin/php -q cron.php
И обязательно убедитесь что крон добавлен от того же юзера под которым он тестировался в консоли.