shell + PHP

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

shell + PHP

Непрочитанное сообщение Volodymyr » 2010-06-29 10:55:33

Есть задача. Оптимизировать изображения и переложить на другой сервер.

Приблизительно как я накидал алгоритм.
  1. Имеются директории разной степени вложенности с jpg файлами.
  2. PHP по определенной схеме может генерировать ряд инструкция для конвертации этих изображений при помощи ImageMagic с переносом их в папку откуда ни будут перемещаться на другой сервер.
  3. По крону скрипт проверяет наличие инструкций (по сути это те же файлы скриптов с заложенными командами или только списки файлов) и исполнять их. По окончанию обработки каждой директории (когда файлы перенесены в папку для отгрузки формируется некий указатель что эту папку можно отгружать на удаленный сервер (например по NFS).
  4. Другой скрипт по расписанию на основе этих указателей (или инструкций) перемещает директории с файлами на удаленный сервер.
Не совсем разобрался как из одного скрипта запустить другой или отчитать его содержимое. С переносом по NFS тоже вроде все нормально, только не ясно что будет если не будет соединения, скажем проверять его перед тем как переносить. Для определения работает ли уже такой скрипт или нет, решил использовать файл-флаг. Да и вообще насколько такая конструкция живучая. Может что-то можно сделать более оптимально.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: shell + PHP

Непрочитанное сообщение thefree » 2010-06-29 11:37:32

учите perl, ftp + ImageMagic, связка уже и обкатана и работает в лёт
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: shell + PHP

Непрочитанное сообщение Volodymyr » 2010-06-29 11:45:15

Основная система которая принимает и раскладывает изображения (по сути CMS) написана на PHP.

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: shell + PHP

Непрочитанное сообщение thefree » 2010-06-29 12:41:15

Volodymyr писал(а):Основная система которая принимает и раскладывает изображения (по сути CMS) написана на PHP.
и? сохраняйте изображение потом по крону жмите его и сразу на ftp заливайте ...
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: shell + PHP

Непрочитанное сообщение Volodymyr » 2010-07-19 12:46:01

Все сделал, все работает. Если кому интересно могу поделится скриптами.

PHP который генерирует инструкции. PRJ_DIR - константа путь к проекту.

Код: Выделить всё

$dir = $l_code;
$source = PRJ_DIR . 'ecms/orders/hold/' . $dir . '/';
$destination = PRJ_DIR . 'ecms/orders/transfer/' . $dir . '/';
$file_sh_convert = PRJ_DIR . 'ecms/orders.sh/convert/' . $dir . '.sh';
$file_sh_transfer = PRJ_DIR . 'ecms/orders.sh/transfer/' . $dir . '.sh';
$this->_make_dir($destination);
$directory = dir($source);
file_put_contents($file_sh_convert, '#!/bin/sh' . "\n\n");
while (false !== ($file = $directory->read())) {
	if ($file == '.' || $file == '..') {
		continue;
	}
	if ($file == 'order.txt') {
		copy($source . $file, $destination . $file);
		continue;
	}
	$source . '/' . $file;
	$current = $path_convert . 'convert ' . $source . $file . ' -units PixelsPerInch -density 300x300 -sampling-factor 4:2:2 -quality 95 -strip ' . $destination . $file . "\n";
	file_put_contents($file_sh_convert, $current, FILE_APPEND);
}
file_put_contents($file_sh_convert, 'mv ' . $destination . $dir . '.sh ' . $file_sh_transfer, FILE_APPEND);
chmod($file_sh_convert, 0777);
file_put_contents($destination . $dir . '.sh', '#!/bin/sh' . "\n\n" . 'mv ' . $destination . ' ' . str_replace('transfer/', 'print/.', $destination) . "\n" . 'mv ' . str_replace('transfer/', 'print/.', $destination) . ' ' . str_replace('transfer/', 'print/', $destination));
chmod($destination . $dir . '.sh', 0777);
$directory->close();
photobooks_conver.sh

Код: Выделить всё

#!/bin/sh

flagfile="/root/photobooks_conver_flag"
if [ -f ${flagfile} ];
    then exit
fi

echo "photobooks_conver_flag" > ${flagfile}
dir= PRJ_DIR + "ecms/orders.sh/convert"

cd ${dir}
for i in $dir/*;
do
    if [ -f $i ]
        then $i && rm $i
    fi
done
rm ${flagfile}
И аналогичный photobooks_transfer.sh

Код: Выделить всё

#!/bin/sh

flagfile="/root/photobooks_transfer_flag"
if [ -f ${flagfile} ];
    then exit
fi

echo "photobooks_transfer_flag" > ${flagfile}
dir=PRJ_DIR + "ecms/orders.sh/transfer"

cd ${dir}
for i in $dir/*;
do
    if [ -f $i ]
        then $i && rm $i
    fi
done
rm ${flagfile}
Оба запускаются по крону раз в 10 минут. Первый скрипт исполняет весь набор инструкция по конвертации, второй исполняет наборы инструкций по переносу. Не хватает наверное проверки срока жизни флага, возможен выход без удаления или сбой когда флаг не сотрется, проверить если старше скажем 12 часов, то убить принудительно.

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: shell + PHP

Непрочитанное сообщение thefree » 2010-07-19 18:13:18

это ужас.
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: shell + PHP

Непрочитанное сообщение Volodymyr » 2010-07-19 18:32:38

Обоснуй.

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: shell + PHP

Непрочитанное сообщение thefree » 2010-07-19 18:40:28

Да что тут обосновывать, начать с того что есть такая вещь как ARGV.
Ну и закончить тем ... Всё что Вы написали ОЧЕНЬ криво ...
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: shell + PHP

Непрочитанное сообщение Volodymyr » 2010-07-19 18:56:24

криво это не аргумент. да и кривизна зависит часто от точки зрения.

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: shell + PHP

Непрочитанное сообщение thefree » 2010-07-19 18:59:09

ну да, ну да ...
3 действия 3и скрипты ...

В туалет тоже ходите в 2а захода?
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: shell + PHP

Непрочитанное сообщение Volodymyr » 2010-07-19 19:46:00

thefree писал(а):3 действия 3и скрипты ...
Очень интересно пользователю залить 1Гб картинок на быстрый сервер, а потом при оформление заказа ждать когда поконвертит этот гигабайт и перекинин на сервер печати. А так при оформлении скрипт 1 генерирует инструкции, а потом по крону отрабатывается конвертация и переброска. Естественно что 2 и 3 можно совместить, типа конвертнули папку и перебросили.

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: shell + PHP

Непрочитанное сообщение thefree » 2010-07-20 9:19:53

ajax?

И всё одно, пользователь должен ждать 10 минут
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: shell + PHP

Непрочитанное сообщение Volodymyr » 2010-07-20 9:48:21

Зачем Аякс? Просто что бы было? Процедура конвертации может быть запущена оператором, и на конвертацию может быть отправлено от 1 до 100 папок в каждой может быть до 1Гб картинок. Прежде чем писать тут ненужные советы и не аргументированные комментарии стоило бы сначала особенности роботы уточнить. Да перестарался с тем что конвертировать, а потом отдельно переносится, можно одним ходом делать - переделаю. Возможно код можно было оформить по проще для восприятия кем либо через дополнительные переменные. Но на то и рефактор существует.

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: shell + PHP

Непрочитанное сообщение thefree » 2010-07-20 9:54:33

Volodymyr писал(а):Зачем Аякс? Просто что бы было? Процедура конвертации может быть запущена оператором, и на конвертацию может быть отправлено от 1 до 100 папок в каждой может быть до 1Гб картинок. Прежде чем писать тут ненужные советы и не аргументированные комментарии стоило бы сначала особенности роботы уточнить. Да перестарался с тем что конвертировать, а потом отдельно переносится, можно одним ходом делать - переделаю. Возможно код можно было оформить по проще для восприятия кем либо через дополнительные переменные. Но на то и рефактор существует.
Мне кажется Вам был предложен самый лучший вариант
thefree писал(а):учите perl, ftp + ImageMagic, связка уже и обкатана и работает в лёт
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: shell + PHP

Непрочитанное сообщение Volodymyr » 2010-07-20 11:42:40

thefree писал(а):учите perl, ftp + ImageMagic, связка уже и обкатана и работает в лёт
Зачем нужен perl если вся система работает на РНР? Зачем нужен ftp (по которому фалы бьются) когда диск смонтирован по NFS, ImageMagic используется это видно из примера РНР.

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: shell + PHP

Непрочитанное сообщение thefree » 2010-07-20 14:22:38

Volodymyr писал(а):
thefree писал(а):учите perl, ftp + ImageMagic, связка уже и обкатана и работает в лёт
Зачем нужен perl если вся система работает на РНР? Зачем нужен ftp (по которому фалы бьются) когда диск смонтирован по NFS, ImageMagic используется это видно из примера РНР.
NFS звучало как на пример, ftp проще отслеживать работает ли он ...
_http://habrahabr.ru/blogs/webdev/99108/ ну вот еще почитать стоит ...

perl советовал т.к. считаю его более православным языком чем php
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Volodymyr
лейтенант
Сообщения: 614
Зарегистрирован: 2008-06-17 16:04:56
Откуда: Ukraine, Lviv
Контактная информация:

Re: shell + PHP

Непрочитанное сообщение Volodymyr » 2010-07-20 15:13:43

Читал. Ничего нового. Конвертирование конвертом, перловый интерфейс понятно для чего. Я же просто генерирую инструкцию для шела. Чем происходит генерация это вообще не принципиальный вопрос. РНР удобен тем что вся система на нем и он и там в потоке обрабатывает эти заказы, так пусть параллельно инструкцию делает. Относительно разброски по ядрам - тут надо думать и на тему GraphicsMagick тоже. Так как на сервере стоит 16 ядер.

P.S. Пошел конструктив.