0

もともと、光学検査でパスは同じだったのに、file_exists() が一方に true を返し、他方に false を返したという問題がありました。問題を絞り込むのに何時間も費やした後、次のコードにたどり着きました...(パスは編集済み)

$myCorePath = $modx->getOption('my.core_path', null, $modx->getOption('core_path').'components/my/');

$pkg1 = $myCorePath.'model/';
$pkg2 = MODX_CORE_PATH . 'components/my/model/';
$pkg3 = '/path/to/modx/core/components/my/model/';

var_dump($pkg1, $pkg2, $pkg3);

...そしてその出力:

string '/path/to/modx/core/components/my/model/' (length=37)
string '/path/to/modx/core/components/my/model/' (length=78)
string '/path/to/modx/core/components/my/model/' (length=78)

したがって、興味深いことに、単純に文字列を書き留めることを含む 2 つのバージョンでは、明らかにワイド文字が使用されています (これらは file_exists() に関して機能しました)。私はこれを調査しようとしましたが、結局、phpにはワイド文字列のようなものがないということだけわかりました。また、16 進エディタを使用して、すべての文字列定数が実際には php ファイル内の 1 文字あたり 1 バイトしか使用しないことを確認しました。

phpinfo() は、PHP バージョン 5.4.9 を使用しており、64 ビット Linux マシン fwiw で実行していることを示しています。マニュアルは 1 週間前に編集されました。その情報は正確ではありませんか、それともここで何が起こっているのですか?

4

1 に答える 1

0

マルチバイトコーディングが原因だと思います。

于 2013-09-12T13:41:39.983 に答える