【问题标题】:CakePHP 3.0, Production 500 Error caused by VendorCakePHP 3.0,由供应商引起的生产 500 错误
【发布时间】:2017-03-16 21:07:46
【问题描述】:

我使用的是 CAKEPHP 3.4 版。

这是来自 error.log 的错误堆栈跟踪

 2017-03-16 21:37:45 Error: [ParseError] syntax error, unexpected 'getWordCount' (T_STRING), expecting variable (T_VARIABLE) or '$' in /home/mfeditin/public_html/mf_editing_services/src/Controller/WordController.php on line 27
Request URL: /Word/getWordCount
Client IP: 47.54.223.
Stack Trace:
#0 /home/mfeditin/public_html/mf_editing_services/vendor/composer/ClassLoader.php(322): Composer\Autoload\includeFile('/home/mfeditin/...')
#1 [internal function]: Composer\Autoload\ClassLoader->loadClass('App\\Controller\\...')
#2 [internal function]: spl_autoload_call('App\\Controller\\...')
#3 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Core/App.php(152): class_exists('App\\Controller\\...')
#4 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Core/App.php(64): Cake\Core\App::_classExistsInBase('\\Controller\\Wor...', 'App')
#5 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Http/ControllerFactory.php(68): Cake\Core\App::className('Word', 'Controller', 'Controller')
#6 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php(90): Cake\Http\ControllerFactory->create(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#7 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Http/BaseApplication.php(78): Cake\Http\ActionDispatcher->dispatch(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#8 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Http\BaseApplication->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#9 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Routing/Middleware/RoutingMiddleware.php(59): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#10 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\RoutingMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#11 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Routing/Middleware/AssetMiddleware.php(88): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#12 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\AssetMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#13 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Error/Middleware/ErrorHandlerMiddleware.php(92): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#14 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Error\Middleware\ErrorHandlerMiddleware->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response), Object(Cake\Http\Runner))
#15 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Http/Runner.php(51): Cake\Http\Runner->__invoke(Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#16 /home/mfeditin/public_html/mf_editing_services/vendor/cakephp/cakephp/src/Http/Server.php(80): Cake\Http\Runner->run(Object(Cake\Http\MiddlewareQueue), Object(Cake\Http\ServerRequest), Object(Cake\Http\Response))
#17 /home/mfeditin/public_html/mf_editing_services/webroot/index.php(37): Cake\Http\Server->run()
#18 {main}

我在控制器中使用我的供应商类之一时遇到问题。

基本上,我的代码在 localhost 上运行良好,但是当我将其推送到生产服务器时,它会呈现 500 错误并显示以下消息。

我的控制器代码如下

use App\Controller\AppController; 
use App\Form\ContactForm; 
use Vendor\autoload; 

class WordController extends AppController 
{
    public function initialize() 
    { 
        parent::initialize(); 
        $this->loadComponent('RequestHandler'); 
    } 

    public function getWordCount() 
    { 
        if ($data = $this->request->data) 
        { 
            $wrap = new \Enzim\Lib\TikaWrapper\TikaWrapper; 

            $count = new \Enzim\Lib\TikaWrapper\TikaWrapper::getWordCount($data['file-0']['tmp_name']); 

            $count = 1; 

            $this->set('count', $count); 
            $this->set(compact('count')); 
        } else { 
            $this->Flash->error('We were unable to charge this card'); 
        }
    } 
} 

如果需要有关生产服务器、依赖项或其他任何内容的更多信息,请告诉我。

还有;我应该再次强调,这段代码在 localhost 上运行良好;并且它在哪里中断

$count = new \Enzim\Lib\TikaWrapper\TikaWrapper::getWordCount($data['file-0']['tmp_name']);

如果我评论上面的文本,控制器就会运行,但当然,count 显示为 1(临时占位符,用于查看 ajax 请求是否正常工作..)

【问题讨论】:

  • 感谢@T-Heron 的编辑,我确实在做和你一样的事情,但是你打败了我,我对这些 块非常无能。
  • 你很快就会习惯的......
  • 欢迎来到 Stack Overflow。每当收到错误时,请始终发布 complete 错误,即包括 full 堆栈跟踪(最好从以正确可读的方式提供的日志),即使问题对于熟悉 CakePHP 的人来说可能很明显!还要显示/描述相应的上下文,即显示/突出显示实际触发错误的代码,并请始终提及您的 exact (x.x.x) CakePHP 版本 - 谢谢!通常,在收集这些信息时,问题甚至会自行解决。
  • 话虽这么说......首先这个有效逻辑如何?我会假设TikaWrapper:getWordCount() 返回一个数值,从它实例化一些东西(即将它传递给new)肯定行不通。
  • 您好,我会根据您的建议更新我的帖子,非常感谢!此外,在 /Enzim 之前添加或删除 new 不会改变结果。

标签: php json ajax cakephp cakephp-3.0


【解决方案1】:

如果它在 localhost 上运行良好,您是否上传了 .htaccess 文件?

【讨论】:

  • 嗨,Ahmed,我有一个可用的 .htaccess 文件。我的整个网站都正常工作,减去调用此 WordController 的一页。感谢您的快速回答!
猜你喜欢
  • 2015-07-04
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多