1

100 万を超えるファイル パス レコードが mysql DB の列に保存されています。パスが異なる可能性のある同様のファイルをプルダウンし、PHP で配置するアプリケーションを作成しようとしています。DB をすべてセットアップして、PHP を機能させようとしていますが、次の警告に出くわします。また、次の出力を見て比較するとわかるように、配列が適切に作成されていないことにも遭遇します。ファイル ディレクトリでは、奇妙な段落記号が表示されたり、ファイル名がごちゃごちゃになったりします。

array(4) { 
    [0]=> string(42) "2013-01-17-141325589_2013-01-18-j-CP08.45" 
    [1]=> string(3) "ar¶" 
    [2]=> string(10) "loc¶66hygh" 
    [3]=> string(23) "dfgh  est_file1.jpg.meta" 
}

これが私のコードです:

$filepath = "2013-01-17-141325589_2013-01-18-j-CP08\45645\5\ar\666\loc\66666hygh\dfgh\test_file1.jpg.meta";

$pieces = explode("\\", $filepath);

var_dump($pieces);
?>
4

4 に答える 4

1

二重引用符を使用すると、PHP はテンプレート モードになります。たとえば\456、8 進数として扱われます。

問題を解決するには、一重引用符'を使用してください。

于 2013-07-10T13:48:52.340 に答える
0

配列生成の問題は、$filepath. 次のコードは期待どおりに機能します。

<?php
$filepath = "2013-01-17-141325589_2013-01-18-j-CP08\\45645\\5\\ar\\666\\loc\\66666hygh\\dfgh\\test_file1.jpg.meta";
$pieces = explode("\\", $filepath);
var_dump($pieces);
?>

バックスラッシュがエスケープされていない場合、バックスラッシュ自体がエスケープ文字として機能するため、パスで予期しない動作が発生します。

pathinfo()ただし、実行している内容により関連性の高い関数が見つかる場合があります。

于 2013-07-10T13:47:16.873 に答える
0

\xxxここで、xxx0 ~ 7 の範囲の数字は 8 進数として解釈されます。したがって、たとえば、\666コード内の は 8 進数の 666 と見なされ、16 進数の 0x1B6/10 進数の 438 (文字) として扱われます。

于 2013-07-10T13:48:50.033 に答える
0

二重引用符を一重引用符に変更するだけで、文字列は解析されません。

于 2013-07-10T13:52:47.590 に答える