我知道这个错误是由于一些不匹配的括号,引号或其他什么,我仍然无法找到解决方案,因为我的代码在localhost上完美运行但在我的共享托管服务器上给了我这个错误(相同的PHP版本) :5.3.8)
function call_hook() {
global $url;
$url_array = explode('/', $url);
if (isset($url_array[0]) && $url_array[0] != '') {
$controller = $url_array[0];
} else {
$controller = DEFAULT_CONTROLLER;
}
if (isset($url_array[1]) && $url_array[1] != '') {
$action = $url_array[1];
} else {
$action = DEFAULT_ACTION;
}
if (isset($url_array[2])) {
$queryString = explode(PARAM_DELIMITER, $url_array[2]);
} else {
$queryString = array();
}
$controller_name = $controller;
$controller = ucwords($controller);
$model = rtrim($controller, 's');
$controller .= 'Controller';
$dispatch = new $controller($model, $controller_name, $action);
if ((int)method_exists($controller, $action)) {
// I get the error after this function call
call_user_func_array(array($dispatch, $action), $queryString);
} else {
/* error */
}
}
这个函数从URL加载一些参数然后调用右边的控制器,在call_user_func_array调用之后它应该加载相应的控制器php文件,但是我收到了这个错误:
Parse error: syntax error, unexpected T_STRING in /web/htdocs/www.mysite.com/home/app/application/controllers/CONTROLLERFILE.php on line 1
每个控制器都会发生这种情况。 我已经尝试检查此调用之前的代码,但由于它在localhost上正常工作,我真的不知道该看什么。我所知道的唯一区别是,魔术引号在本地主机上是关闭,在服务器上是开启,但我不知道是否这个
修改 此外,每个控制器的开始是:
<?php
class ControllerName extends Controller {
localhost是一个Windows系统,我的服务器是Linux服务器,如果这可能很重要。
答案 0 :(得分:5)
我修好了。在Windows上编写代码意味着将\r\n
作为新行字符,这些字符在我的Linux主机上没有正确解释:将所有\r\n
转换为UNIX标准新行char \n
修复了错误< / p>