ファイルのハウンダッドを含むPHPアプリケーションがあります。問題は、1つまたは複数のファイルに明らかにBOMがあるため、セッションを作成するときにエラーが発生する... PHPやサーバーを再構成する方法はありますか、どのようにしてBOMを取り除くことができますか?または、少なくともソースを特定しますか?私はvimの内部に一度バイトオーダーマークでセッションエラーが発生しました
0
A
答えて
0
私はこのスクリプトでBOMを含むファイルを識別できました。おそらく将来この同じ問題を持つ他の人に役立つかもしれません。作品なしのeval()
。
function fopen_utf8 ($filename) {
$file = @fopen($filename, "r");
$bom = fread($file, 3);
if ($bom != b"\xEF\xBB\xBF")
{
return false;
}
else
{
return true;
}
}
function file_array($path, $exclude = ".|..|libraries", $recursive = true) {
$path = rtrim($path, "/") . "/";
$folder_handle = opendir($path);
$exclude_array = explode("|", $exclude);
$result = array();
while(false !== ($filename = readdir($folder_handle))) {
if(!in_array(strtolower($filename), $exclude_array)) {
if(is_dir($path . $filename . "/")) {
// Need to include full "path" or it's an infinite loop
if($recursive) $result[] = file_array($path . $filename . "/", $exclude, true);
} else {
if (fopen_utf8($path . $filename))
{
//$result[] = $filename;
echo ($path . $filename . "<br>");
}
}
}
}
return $result;
}
$files = file_array(".");
-1
vim $(find . -name \*.php)
あれば利用できるPHPソリューションを好むだろう:
もちろんの真の解決策は、ファイルを保存しないように(だけでなく、その他のチームメンバー)エディタの設定を修正することです:argdo :set nobomb | :w
1
UTFバイトオーダーマーク付き。ここで読む:https://stackoverflow.com/a/2558793/43959
この機能を使用して、別のPHPファイルを含める前にBOMを「透過的に」削除することができます。
注:ここでデモするeval()
で厄介なことをするのではなく、あなたのエディタ/ファイルを修正することをお勧めします。
これは概念だけの証拠である:
bom_test.php:先頭にBOMと
<?php
function bom_safe_include($file) {
$fd = fopen($file, "r");
// read 3 bytes to detect BOM. file read pointer is now behind BOM
$possible_bom = fread($fd, 3);
// if the file has no BOM, reset pointer to beginning file (0)
if ($possible_bom !== "\xEF\xBB\xBF") {
fseek($fd, 0);
}
$content = stream_get_contents($fd);
fclose($fd);
// execute (partial) script (without BOM) using eval
eval ("?>$content");
// export global vars
$GLOBALS += get_defined_vars();
}
// include a file
bom_safe_include("test_include.php");
// test function and variable from include
test_function($test);
test_include.php、
test
<?php
$test = "Hello World!";
function test_function ($text) {
echo $text, PHP_EOL;
}
OUTPUT:
[email protected]$ php bom_test.php
test
Hello World!
+0
しようとします...しかし、私のエディタが正しく設定されている、誰かがelsesではなかった.... – Michal
関連する問題
- 1. VLC:リモートファイルを再生しているときにセッションエラーが発生しました
- 2. ChromeDriverでこのようなセッションエラーが発生していない
- 3. PHPログインスクリプト - セッションエラーが発生する可能性があります
- 4. バリデーションスクリプトで問題が発生しました。エラーが発生しました。
- 5. SSRSサブスクリプションでエラーが発生しましたが、Report BuilberまたはReportServer WebUIでエラーが発生しました
- 6. ホームステイでエラーが発生したときにエラーが発生しました
- 7. UIAlertViewでエラーが発生しました。
- 8. フィボナッチシーケンスでエラーが発生しました
- 9. Excelでタイプミスマッチエラーが発生しました。
- 10. クイックソートプログラムでエラーが発生しました
- 11. System.Drawing.dllで 'System.ArgumentException'が発生しました
- 12. ActionPerformedでCloneNotSupportedExceptionが発生しました
- 13. Flumotionでエラーが発生しました
- 14. アクティビティでNullPointerExceptionが発生しました
- 15. BigDecimalでエラーが発生しました
- 16. argparseでエラーが発生しました
- 17. DNSでエラーが発生しました。
- 18. サービスでNullpointerExceptionが発生しました
- 19. バイナリコードでエラーが発生しました
- 20. アンドロイドスタジオでエラーが発生しました。
- 21. アンドロイドスタジオでコンテンツランタイムエラーが発生しました
- 22. xmlhttpresponseでエラーが発生しました
- 23. イオンライブリロードでエラーが発生しました
- 24. データバインディングでエラーが発生しました
- 25. クラウドコードでエラーが発生しました
- 26. cx_freezeでインポートエラーが発生しました
- 27. ハイブコマンドでエラーが発生しました
- 28. LINQでSystem.NullReferenceExceptionが発生しました
- 29. DateTimeFormatterでエラーが発生しました
- 30. PyTorchでオーバーフローエラーが発生しました
これらのファイルはどのように作成されましたか? –
http://stackoverflow.com/questions/204765/elegant-way-to-search-for-utf-8-files-with-bom –
はどのように作成されたか違いはありません... @anders lindahlこれはシェルスクリプトです、私はそれを使用することはできません... – Michal