Exec() при установке

Ошибки, проблемы, способы их решения.
B0nuse
Сообщения: 79
Зарегистрирован: 2010-04-16 23:10:59

Exec() при установке

Сообщение B0nuse » 2010-04-20 19:47:38

Здравствуйте!

Зачем скрипт при установке требует функцию PHP exec() ? - пока на отключенную только эту фукцию ругается...
Как обойтись без этой функции при установке и использовании скрипта?
И возможно других функций

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

system, shell_exec, proc_terminate, proc_open,proc_nice, proc_getstatus, proc_close,  escapeshellcmd, escapeshellarg,passthru, popen, virtual, show_source,  pclose, exec, safe_dir, dl,ini_restore, chown, chgrp, shown_source, mysql_list_dbs,get_current_user, getmyid, apache_child_terminate, leak,pfsockopen,allow_url_fopen   

которые, обычно, отключают на хостингах по соображениям безопасности...

Заранее спасибо.
возможно все...

Аватара пользователя
Alex Keda
Сообщения: 2907
Зарегистрирован: 2009-10-07 14:30:54
Откуда: USSR
Поблагодарили: 20 раз

Re: Exec() при установке

Сообщение Alex Keda » 2010-04-21 1:00:03

при использовании - нет
Убей их всех! Бог потом рассортирует...

Виталий
Site Admin
Сообщения: 344
Зарегистрирован: 2009-10-10 0:41:16
Контактная информация:

Re: Exec() при установке

Сообщение Виталий » 2010-04-21 9:53:27

exec() необходим для запуска команд.

B0nuse
Сообщения: 79
Зарегистрирован: 2010-04-16 23:10:59

Re: Exec() при установке

Сообщение B0nuse » 2010-04-21 21:06:57

Виталий писал(а):exec() необходим для запуска команд.

Уважаемый, Виталий!
Для чего предназначе exec я знаю. Вопрос в другом был
B0nuse писал(а):Как обойтись без этой функции при установке и использовании скрипта?

Для чего использовать в скрипте команды, выполняющиеся из консоли? Это сильно нарушает политику безопасности. Почему нельзя обойтись только средствами ПХП?
Вы можете рассказать для чего и в какой момент используются подобные команды?
возможно все...

Аватара пользователя
Alex Keda
Сообщения: 2907
Зарегистрирован: 2009-10-07 14:30:54
Откуда: USSR
Поблагодарили: 20 раз

Re: Exec() при установке

Сообщение Alex Keda » 2010-04-21 21:32:00

вы можете исходный код посмотреть.
команду grep вроде никто не отменял? =)
===========
из того что я видел - mysqldump, gzip, htmldoc, и ещё кой-чё по мелочи.
Убей их всех! Бог потом рассортирует...

B0nuse
Сообщения: 79
Зарегистрирован: 2010-04-16 23:10:59

Re: Exec() при установке

Сообщение B0nuse » 2010-04-26 11:49:40

lissyara писал(а):из того что я видел - mysqldump, gzip, htmldoc, и ещё кой-чё по мелочи.

Хорошо. Глянем вместе:
#---

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

hosts/billing/comp/Tasks/BackUp.comp

Строка 56

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

mysqldump --host=%s --port=%u --user=%s --password=%s --quote-names -r %s %s 2>&1

Выполняется дамп БД.
#---

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

hosts/billing/comp/www/Administrator/LogScan.comp

Строка 29

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

$Command = SPrintF('tail -n %u %s/%s',$Lines,$Logs,$Log);

Строка 32

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

$Command .= SPrintF(' | grep %s',EscapeShellArg($Search));

Строка 34

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

$Command .= ' 2>&1';

Смотрим лог...
Можно сделать средствами пхп, но лучше это делать самому при необхоимости с консоли...
#---

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

hosts/root/comp/www/Patches.comp

Строка 38

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

$Command = SPrintF('find %s -name "%s*.gz" -type f -mtime +2 -exec rm -f {} \;',$Folder,$DbName);

Ищем и удаляем файлы .gz которым больше 2х суток.
По хорошему, данную команду нужно вообще вынести в отдельный sh скрипт и повесить на крон, при необходимости.

Строка 50

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

$Command = 'cd %s;mysqldump --host=%s --port=%u --user=%s --password=%s --quote-names -r %s %s 2>&1;gzip %s';

бэкап БД...
Эти функции должен делать сам админ сервера, если он хороший админ...И делать это средставми самостоятельных sh скриптов или средствами панели.

Строка 353

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

$Command = 'mysql --host=%s --port=%u --user=%s --password=%s %s 2>&1 < %s';

инсерт базы в БД.. например - файла строки 347

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

$Path = SprintF('%s/db/%s/permissions.sql',SYSTEM_PATH,$HostID);

строки 366

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

$Path = SprintF('%s/db/%s/views.sql',SYSTEM_PATH,$HostID);

строки 385

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

$Path = SprintF('%s/db/%s/triggers.sql',SYSTEM_PATH,$HostID);

строки 404

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

$Path = SprintF('%s/db/%s/functions.sql',SYSTEM_PATH,$HostID);

#---

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

hosts/root/system/libs/Image.lib

строка 62

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

$Command = SPrintF('convert %s -thumbnail %ux%u^ -gravity North -extent %ux%u %s',$File,$Width,$Height,$Width,$Height,$File);

работа с картинками
#---

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

patches/billing/files/1000020.php

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

patches/billing/files/1000021.php

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

patches/billing/files/1000021.php

строка 3

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

Exec(SPrintF('rm -rf %s/scripts/JBsServer',SYSTEM_PATH));

удаляем файл...
#---

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

scripts/billing/install-gui.php

строка 275

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

$MySQL = SPrintF('mysql -u %s --password=%s --host=%s --port=%u %s < %s 2>&1',$__SETTINGS['db-user'],$__SETTINGS['db-password'],$__SETTINGS['db-server'],$__SETTINGS['db-port'],$__SETTINGS['db-name'],$Path);

инсерт файлов в БД при установке.

строка 401

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

$Result = Exec('mysql --version 2>&1');

запрос версии мускуля

строка 422

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

$Result = Exec('htmldoc --version 2>&1');

запрос версии htmldoc
#---

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

scripts/root/db-install.php

инсерт баз в БД...
#---

Надеюсь я все нашел?
И это не считая sh скриптов, типа flush.sh

Замечу - я нисколько не критикую работу автора! Каждый др@#$т как он хочет...
Казалось бы, ничего страшного и все хорошо, но, повторюсь - функцию exec() часто запрещают на серверах в пхп по соображениям безопасности.

Поэтому, обращаясь к автору скрипта, прошу:
исключите (или минимизируйте) в будущих релизах использование функции exec() в биллинге. Чтобы без этой функции можно было нормально установить биллинг, настроить его и использовать (пусть даже без каких-то функций).

Все вышесказанное является ИМХО.
Спасибо.
возможно все...


Вернуться в «Решение проблем»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя