Запустить команду оболочки в безопасном режиме - php

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

PHP Warning:  shell_exec(): Cannot execute using backquotes in Safe Mode

Также я не хочу отключать безопасный режим. Есть ли способ выполнить это в безопасном режиме или любой другой команде для той же цели?


person shivam    schedule 21.02.2014    source источник
comment
Какую строку вы передаете shell_exec()?   -  person Alma Do    schedule 21.02.2014
comment
я пытаюсь запустить команду mysql   -  person shivam    schedule 21.02.2014
comment
@singhshivam Не должно быть никаких причин запускать команды mysql через командную строку. Вы можете делать все, что вам нужно, используя MySQLi или PDO, если у вас есть правильные разрешения.   -  person elixenide    schedule 21.02.2014
comment
@EdCottrell Мне нужно сбросить sql в mysql. Я не могу найти для этого команду MySQLi. Это да, я использовал shell_exec() в первую очередь.   -  person shivam    schedule 21.02.2014
comment
Если вы действительно хотите работать в безопасном режиме, вам придется написать для этого собственную процедуру. Перечислите все таблицы, представления, сохраненные программы и т. д. и выгрузите их все, по одному, используя обычные операторы SQL.   -  person elixenide    schedule 21.02.2014


Ответы (2)


Безопасный режим отключает shell_exec() :

shell_exec() (функциональный эквивалент обратных кавычек) Эта функция отключена, когда PHP работает в безопасном режиме.

Весь смысл безопасного режима заключается в том, чтобы предотвратить выполнение на уровне оболочки из PHP-скрипта. Так что нет, нет никакого способа обойти это, если вы не напишете собственное расширение PHP.

Кроме того, имейте в виду, что Безопасный режим УСТАРЕЛ, начиная с PHP 5.3.0, и УДАЛЕН, начиная с PHP 5.4.0. .

person elixenide    schedule 21.02.2014
comment
да я это читал. также этот безопасный режим устарел в последних версиях php. Но все же мне было интересно, есть ли какая-либо возможность для этого? очень ценю вашу помощь! - person shivam; 21.02.2014
comment
Смотрите мою правку. Нет, нет никакого способа обойти это; смысл безопасного режима в том, чтобы предотвратить именно то, что вы пытаетесь сделать. - person elixenide; 21.02.2014

Ваше требование состоит в том, чтобы сбросить mysql, и для этого нет библиотеки MySQLi. Итак, что вы можете сделать, так это создать расширение PHP, которое выполняет mysqldump (вы можете использовать функцию system в C), установить расширение и вызвать его из PHP как функцию.

Пример того, как создать расширение PHP, находится здесь: http://devzone.zend.com/303/extension-writing-part-i-introduction-to-php-and-zend/

person Manu Manjunath    schedule 21.02.2014
comment
Я избегал этого в начале, но я думаю, что это единственный вариант сейчас. Спасибо за совет! :) - person shivam; 21.02.2014