【问题标题】:Run shell command in safe mode - php在安全模式下运行 shell 命令 - php
【发布时间】:2014-02-21 06:43:19
【问题描述】:

我想在我的服务器上执行 shell 命令。我为此目的使用了 shell_exec() 。问题是打开安全模式会报错:

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

另外我不想关闭安全模式。无论如何,是否可以使用安全模式或任何其他命令来执行此操作?

【问题讨论】:

  • 你传递给shell_exec()的字符串是什么?
  • 我正在尝试运行 mysql 命令
  • @singhshivam 不应该有任何理由通过命令行运行 mysql 命令。只要您拥有正确的权限,您就可以使用 MySQLi 或 PDO 执行您需要执行的所有操作。
  • @EdCottrell 我必须在 mysql 中转储 sql。我找不到任何 MySQLi 命令。那是我首先使用的是 shell_exec()。
  • 如果你真的想在安全模式下运行,你必须为此编写自己的例程。列出所有表、视图、存储程序等,并使用常规 SQL 语句一次一个地转储它们。

标签: php shell shell-exec


【解决方案1】:

Safe Mode disables shell_exec():

shell_exec()(相当于反引号的功能)当 PHP 在安全模式下运行时,该函数被禁用。

安全模式的全部意义在于防止在 PHP 脚本中执行 shell 级别的操作。所以,不,没有办法绕过它,除非你编写自己的 PHP 扩展。

另外,请注意Safe Mode is DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0

【讨论】:

  • 是的,我读到了。最新的 php 版本也弃用了安全模式。但我仍然想知道这有没有可能?非常感谢您的帮助!
  • 查看我的编辑。不,没有办法解决它;安全模式的重点是防止您正在尝试做的事情。
【解决方案2】:

您的要求是转储 mysql 并且没有用于此的 MySQLi 库。所以你可以做的是,创建一个执行 mysqldump 的 PHP 扩展(你可以使用 C 中的 system 函数),安装扩展并从 PHP 作为函数调用它。

这里有一个如何创建 PHP 扩展的示例:http://devzone.zend.com/303/extension-writing-part-i-introduction-to-php-and-zend/

【讨论】:

  • 我一开始就避免这样做,但我想它现在是唯一的选择。谢谢你的建议! :)
猜你喜欢
  • 1970-01-01
  • 2016-06-14
  • 2010-12-28
  • 2022-11-28
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多