xamppを使用してWindows XPでローカルにcakephpを使用してWebアプリケーションを開発しましたが、すべて正常に機能しました。今日、CentOS と Ubuntu サーバーにデプロイしましたが、どちらにも問題がありました。何が起こっているのかというと、自分の情報と一緒にタブ スペースが出力されているということです。を返すはずの ajax 呼び出しを行うとしましょうOK
。返されるのは" OK"
、より正確には(0x09)OK
このタブがどこから来ているのかよくわかりません。コードを最大限に減らしましたが、それでも取得できます。
コントローラ
public function sendcomment() {
$this->layout = 'ajax';
$this->set('ret', 'OK');
}
意見
<?php echo $ret; ?>
ビューファイルを使用せず、レイアウトに直接情報を出力しても、タブはまだそこにあります:
コントローラ
public function sendcomment() {
$this->layout = 'testlayout';
}
testlayout.ctp
OK
これは、レイアウトに関係なく、すべてのアクションで発生します。
誰かがこれを経験し、何が起こっているのか知っていますか? 私のファイルはすべて BOM なしの UTF-8 でエンコードされており、Windows では XAMPP を通じて問題なく動作します。
- 編集:
わかりました、構成の問題だと言う人もいましたが、私にはわかりません。ただし、「タブ」がどこから来ているのかを見つけようとして、コアファイルにエコーを入れ始め、最終的にタブの場所に到達するまで先に進みました。Cake Webroot の index.php の時点でecho 'a'
、メソッドの前に配置するdispatch()
と、出力はa(0x09)OK
. つまり、タブは確かにケーキから来ています。
ここに問題があります。いくつかのテストの結果を見ると、最終的に行き詰まり、何も起こりませんでした。
今、私はオン(CakeRoot)/lib/Cake/Routing/Dispatcher.php
です。ここでは、次のメソッドがあります。
protected function _loadController($request) {
$pluginName = $pluginPath = $controller = null;
if (!empty($request->params['plugin'])) {
$pluginName = $controller = Inflector::camelize($request->params['plugin']);
$pluginPath = $pluginName . '.';
}
if (!empty($request->params['controller'])) {
$controller = Inflector::camelize($request->params['controller']);
}
if ($pluginPath . $controller) {
$class = $controller . 'Controller';
App::uses('AppController', 'Controller');
App::uses($pluginName . 'AppController', $pluginPath . 'Controller');
App::uses($class, $pluginPath . 'Controller');
if (class_exists($class)) {
return $class;
}
}
return false;
}
私はまさにこの部分にいます:
App::uses($class, $pluginPath . 'Controller');
if (class_exists($class)) {
return $class;
}
echo
次のように、if の前に右を置いた場合のテストは次のとおりです。
App::uses($class, $pluginPath . 'Controller');
echo 'a';
if (class_exists($class)) {
return $class;
}
私の出力は になりますa(0x09)OK
。ただし、次のように if の中にエコーを入れると:
App::uses($class, $pluginPath . 'Controller');
if (class_exists($class)) {
echo 'a';
return $class;
}
私の出力は になります(0x09)aOK
。私の頭に浮かぶ唯一のことはclass_exists()
、タブをエコーすることです。しかし、それだけでは意味がありません。テスト目的で、これを作成しました:
App::uses($class, $pluginPath . 'Controller');
if (TRUE) {
return $class;
}
まだタブが出力されています。さらに悪いことに、if == TRUE
このようなことをすると、echo "a" が if の前にあるか、if のすぐ内側にあるかに関係なく、出力は常に になりますa(0x09)OK
。
ここで何が起こっているのですか?