我正在远程服务器上工作而我无法使用控制台,因为未启用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并且能够从控制台运行命令。但是当从浏览器运行引用的代码时,我就像其他服务器一样挂起。
我已经看过一些使用$ dispatcher-> dispatch()的实现,并尝试了一堆但没有运气。
有什么想法吗?
答案 0 :(得分: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';
}
答案 1 :(得分:0)
试试这个,$ 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);
}