【问题标题】:CakePHP 2.2 AclExtras aco_sync in browser (sh permission denied)浏览器中的 CakePHP 2.2 AclExtras aco_sync (sh 权限被拒绝)
【发布时间】:2013-01-24 05:05:13
【问题描述】:

我在远程服务器上工作,我无法使用控制台,因为 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);

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

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

我已经看到了一些使用 $dispatcher->dispatch() 的实现,并尝试了很多,但都没有成功。

有什么想法吗?

【问题讨论】:

    标签: cakephp acl cakephp-2.2


    【解决方案1】:
    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';
    }
    

    【讨论】:

    • 我已经在我的本地 XAMPP 服务器上尝试过这个,它工作正常,但在视图上显示“错误”而不是“确定”。我该如何解决这个问题?
    【解决方案2】:

    试试这个,$dispatcher->dispatch();似乎仅在出现错误时才显示某些内容。 运行它并检查您的数据库。

        App::uses('ShellDispatcher', 'Console');
        $command = '-app '.APP.' AclExtras.AclExtras aco_sync';
        $args = explode(' ', $command);
        $dispatcher = new ShellDispatcher($args, false);
    
        try {
            $dispatcher->dispatch();
        } catch (Exception $e) {
            pr($e);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-27
      • 2012-06-05
      • 2013-08-15
      • 2014-03-24
      • 1970-01-01
      • 2016-11-19
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多