CakePHP 2.2 AclExtras浏览器中的aco_sync(sh权限被拒绝)

Tom*_*lez 0 acl cakephp cakephp-2.2

我正在使用远程服务器而我无法使用控制台,因为未启用ssh.所以我需要直接从浏览器运行aco_sync(或任何其他不涉及shell的方式).

我设法在我的本地开发服务器上使用控制器/操作中的以下代码同步acos:

$command = ROOT . DS . APP_DIR . DS . 'Console' . DS . 'cake';
$params = ' -app ' . ROOT . DS . APP_DIR;
$params .= ' AclExtras.AclExtras';
$params .= ' aco_sync';
$result = shell_exec($command . $params);
Run Code Online (Sandbox Code Playgroud)

但是在生产服务器上(使用cPanel)我在大约5分钟内没有响应,然后我收到内部服务器错误(500).我只是挂了.实际上,这发生在两个不同的带有cPanel的VPS服务器上.在第一个中,我有ssh并且能够从控制台运行命令.但是当从浏览器运行引用的代码时,我就像其他服务器一样挂起.

  • 我发现php日志文件和cake的日志文件都没有记录错误.
  • 该操作以"admin_"为前缀,如果未登录,则ACL不允许执行.'./''脚本文件具有执行权限(花了一些时间来确定这是必要的).
  • 我试过Chrome和IE8.
  • 调试级别设置为1.
  • 尝试运行脚本后,页面中断,我无法浏览,直到我打开隐身窗口或重新启动浏览器.
  • 我认为运行此脚本时服务器的内存会被完全消耗掉.我不得不重新启动httpd以使网站启动并在我可以控制的服务器上再次运行.

我已经看到一些使用$ dispatcher-> dispatch()的实现并尝试了一堆但没有运气.

有任何想法吗?

小智 5

App::uses('ShellDispatcher', 'Console');
$command = '-app '.APP.' AclExtras.AclExtras aco_sync';
$args = explode(' ', $command);
$dispatcher = new ShellDispatcher($args, false);
if($dispatcher->dispatch()) {
    echo 'OK';
} else {
    echo 'Error';
}
Run Code Online (Sandbox Code Playgroud)