【发布时间】: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