• ベストアンサー

DIRECTORY_SEPARATORについて

PHP5.2.4、OSはwindowsXP、xamppの環境で試しています。 次のようにパスの区切りをDIRECTORY_SEPARATORで指定して、要素を分割して取得したいのですが、 これだと分割できません。 $str = 'C:\dir\file.php'; $tips = split('/'.DIRECTORY_SEPARATOR.'/', $str); //$tips = split('\\', $str); print_r($tips);//Array ( [0] => C:\dir\file.php ) '\\'だと 「Warning: split() [function.split]: REG_EESCAPE」 というエラーがでます。 どのように記述すれば良いのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4855/10270)
回答No.1

Windows環境で確認してませんが、正規表現でなく文字列で分解することにするか、 $tips = explode(DIRECTORY_SEPARATOR, $str); 正規表現での分割にこだわるなら、\ は正規表現の特殊文字なのでクォートして、 $tips = preg_split("/".preg_quote(DIRECTORY_SEPARATOR)."/", $str); preg_splitでなく非推奨関数のsplitを使いたければ、 $tips = split(preg_quote(DIRECTORY_SEPARATOR), $str); $tips = split('\\\\', $str);

takagoo100
質問者

お礼

ご回答ありがとうございます。 なるほど、たしかに文字列で分解できるわけなので 最初のやり方の方が良さそうですね。 参考になりました。ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHP 階層構造 維持 ディレクトリ

    現在指定したディレクトリを中にあるサブディレクトリやファイルを丸ごと階層構造を維持したまま圧縮したいのですが、うまくいきません下記のサイトを参考にしましたがエラーが出てしまいます。例外処理らしいのですが、ドキュメントを読んでもエラーの内容がうまく理解ができません よろしくお願いします。 http://php-archive.net/php/zip-directory/ エラー文 Fatal error: Uncaught Error: Call to undefined function zipDirectory() in C:\MAMP\htdocs\upload\upload-file.php:134 Stack trace: #0 {main} thrown in C:\MAMP\htdocs\upload\upload-file.php on line 134 コード define("file_zone","C:/MAMP/htdocs/upload/test/"); if(isset($_POST["download"])){ // 圧縮するディレクトリー $dir = dirname(__FILE__) . '/test/'; // Zipファイルの保存先 $file = dirname(__FILE__); zipDirectory($dir, $file); // ディレクトリを圧縮する function zipDirectory($dir, $file, $root=""){ $zip = new ZipArchive(); $res = $zip->open($file, ZipArchive::CREATE); if($res){ // $rootが指定されていればその名前のフォルダにファイルをまとめる if($root != "") { $zip->addEmptyDir($root); $root .= DIRECTORY_SEPARATOR; } $baseLen = mb_strlen($dir); $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $dir, FilesystemIterator::SKIP_DOTS |FilesystemIterator::KEY_AS_PATHNAME |FilesystemIterator::CURRENT_AS_FILEINFO ), RecursiveIteratorIterator::SELF_FIRST ); $list = array(); foreach($iterator as $pathname => $info){ $localpath = $root . mb_substr($pathname, $baseLen); if( $info->isFile() ){ $zip->addFile($pathname, $localpath); } else { $res = $zip->addEmptyDir($localpath); } } $zip->close(); } else { return false; } } }

    • ベストアンサー
    • PHP
  • php 正規表現で、\マークを取り除くには?

    php で ereg_replace関数を使って¥マークを取り除きたいのですが、 ereg_replace("\\", "",$str); と記述すると Warning: ereg_replace() [function.ereg-replace]: REG_EESCAPE in C:\xampp... とエラーになってしまいます。 どうすれば正規表現により円マークを取り除くことができるのでしょうか?

    • ベストアンサー
    • PHP
  • shでディレクトリを表示する方法

    lsか何かのコマンドでディレクトリ名のみ取得する方法を教えてください。 dir_a/ | +-dir_b/ | +-dir_c/ | +-dir_d/ | +-file_a | +-file_b dir_aの下で実行したとして dir_b、dir_c、dir_dのみが取得できたらOKです。 「.」や「..」は取得したくありません。 よろしくお願いいします。

  • ディレクトリーが作成されないのは何故でしょう?

    実は、下のように記述して実行してもディレクトリーが作成されずに、その原因がわからないでいます。 <?php parse_str($_COOKIE[abc]); $dirc=$ck_data1; print $dirc; if(!file_exists($dirc)){ mkdir("$dirc"); } ?> 一応ディレクトリー名を確認するために、途中でprint $dirc;を入れて ディレクトリー名を確認しましたが、問題ないようでした。 $dircという変数を遣わないで、直接ディレクトリー名を入れると 問題なくディレクトリーは作成されます。     ↓ <?php parse_str($_COOKIE[abc]); $dirc=$ck_data1; print $dirc; if(!file_exists("test")){  //←testというディレクトリー名を直接入れると、問題なくディレクトリーが作成される。 mkdir("test"); } ?> 何とか、ディレクトリ名を変数で受けて作成したいのですが、 なぜ、変数で受けることができないのかがわかりません。 どなたか、詳しい方よろしくご指導お願いいたします。

    • ベストアンサー
    • PHP
  • 特定ディレクトリのファイルを全部消去する

    2日徹夜していろいろやってみましたがどうにもなりません。 どなたか助けてください! ディレクトリAの中にimageという名前のディレクトリがあります。 imageディレクトリには100前後のjpg画像があります。 ディレクトリAにおいてあるreset.phpで、imageディレクトリ内のフォルダを全部削除するにはどうしたらよいでしょうか。 以下、いろいろ試したソースですが、これだとエラーが出てしまいます。 よろしくおねがいします! $res_dir = opendir( './image' ); while( $file_name = readdir( $res_dir ) ){ unlink($file_name); }

    • ベストアンサー
    • PHP
  • define でのルートディレクトリの定義について・・・。パスが納得できません。

    宜しくお願いします。 Smarty を使用して PHPを勉強しています。 Smartyのデフォルトを変更しようと、 「MySmarty」として新規にクラスを作成しました。 ソースの先頭で、 define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); として、ROOT_DIRにルートディレクトリまでのパスを記憶させています。 全ソースは下記をごらんくらさい。 そこで、  define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); にある、最後の ."/.."); が納得いきません。。。 最初の . ピリオドは連結のためのものだとわかりますが、 あとの/.. はディレクトリの階層をあげる指示ですよね? てなると、クラスの定義のなかで使用するルートディレクトリへのパス が、 おかしく思えてきます。書籍の通りにやっているので、 この通りにやるとうまくいっていますが、自分的になっとくがいかなく・・。 ソースは下記のようになってます。 特に $this->template_dir  のテンプレートディレクトリへのパスを 再設定しているところですが、 ROOT_DIR."/templates" ということは、ルート/../templates  となりますよね? 作業フォルダの図はこの通りです。↓ C:\xampp   |   libs     |-MySmarty.class.php (下記のソースファイル)   |   |   templates       |-input.tpl   |  templates_c <省略> なんとなくですが、ルート/../templates  ではなくて、 ルート/templates なようなきがします。 わかりにくい説明だったかもしてませんが、何卒宜しくお願いいたします。 ______________________________ define("ROOT_DIR",$_SERVER['DOCUMENT_ROOT']."/.."); require_once("Smarty.class.php"); class MySmarty extends Smarty { function MySmarty (){ $this->template_dir = ROOT_DIR."/templates"; $this->compile_dir = ROOT_DIR."/templates_c"; $this->left_delimiter = "{{"; $this->right_delimiter = "}}"; $this->default_modifiers = array('escape'); $this->Smarty(); } } ____________________________

    • 締切済み
    • PHP
  • ディレクトリ内一覧表示

    現在PHPにてディレクトリ内の中のディレクトリ一覧を作成しています。 わからないことがあり、ご投稿させていただきました。 imageフォルダの中に 20110101フォルダと20100101フォルダを作成しています。 imageフォルダ内のディレクトリを一覧表示させたいのですが、下記ソースですと、20110101しか表示されません。 おわかりの方がいらっしゃいましたらご教示お願いします。 $path = 'imageフォルダまでの絶対パス'; $dir = scandir($path, 1);//フォルダ内降順指定 if($dir != "." && $dir != "..") { $dirArray = array($dir); foreach($dirArray as $dir => $val) { for($i = 0; $i <= $dir; $i++) { $dirName = count($dirArray); echo $val[$dirName]; } } } closedir($dir); 宜しくお願いします。

    • ベストアンサー
    • PHP
  • ディレクトリの指定が上手くいかない

    http://ponk.jp/old/php_file/index.php?page=6 で紹介されているスクリプトをコピーし、 $dir = opendir("./"); の部分を $dir = opendir("../tmpl/"); に置き換えたのですが、ファイルが存在しているはずなのに選択メニューにファイル名が表示されません。 試しにカレントディレクトリを指定してみましたが、問題なく表示されました。 [tmpl]までのパスは合ってます。 考えられる原因を教えてください。 長文乱文失礼しました。

    • ベストアンサー
    • PHP
  • PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラム

    PHPでディレクトリ名のみ表示する方法が知りたいです。以下のプログラムで「test」というディレクトリ内のファイル一覧(ディレクトリ名とファイル名)を表示するようにしているのですが、この中からディレクトリ名のみ表示させたいのですがどのようにすればいいのでしょうか? よろしくお願いします。 <?php if ($dir = opendir("test/")) { while (($file = readdir($dir)) !== false) { if ($file != "." && $file != "..") { echo "$file<br>\n"; } } closedir($dir); } ?>

    • ベストアンサー
    • PHP
  • PHP の2つの関数について

    お世話になります。 ディレクトリー内の要素が、さらにディレクトリーなのかあるいはファイルなのかを検証する簡単なルーティンを作っていますが、この中で使っている2つの関数の働きが、自分が理解していたようにならないので質問させていただきます。 (1) str_replace() について ファイルエクスプローラーからpath としてコピーしてきたディレクトリーのパスは次のようになっています。 "C:\xampp\htdocs\PHP-practice\testDir" この中にあるバックスラッシュ "\" 記号を、str_replace() を使って "/" に変えようとしましたが、次のようになってしまいました。 $direct ="C:\xampp\htdocs\PHP-practice\testDir"; $direct = str_replace("\\", "/", $direct); echo "========== ".$direct."<BR>"; 結果は: ========== C: mpp/htdocs/PHP-practice estDir つまり中ほどにあるものは変換されましたが、最初と最後は変換されず、しかも元のパスの一部が消えています。これはどうしたことなのでしょうか?これが最初の質問です。 しかし実際にはここで止まっている訳にいかないので、手作業で修正して先に進めました。 (2)readdir() について ディレクトリーの中をreaddir()で読んで、それがディレクトリーかファイルかを区別する簡単なコードですが、上手く行きません。 出力結果は次のように、ディレクトリーをファイルであると表示してきます。 ========== C:/xampp/htdocs/PHP-practice/testDir insideDir-1 is a file insideDir-2 is a file video1.mp4 is a file readdir() か is_dir()のいずれかの使い方がおかしいのでしょうか? これが2番目の質問です。 実際には testDir フォルダーの中身は以下の通りです。 testDir >> insideDir-1 >> new1.php >>insideDir-2 >> songPath.txt >> video1.mp4 以下に全体のコードを書きます。 <?php function read_directory($direct){ $direct = str_replace("\\", "/", $direct); echo "========== ".$direct."<BR>"; $handle = opendir($direct); $entry = readdir($handle); $entry = readdir($handle);// skip . & .. while($entry = readdir($handle)){ if( is_dir($entry) ) { echo $entry." is a directory<BR>"; }else{ echo $entry." is a file<BR>"; } }// while closedir($handle); return; }// function // ================ main program ================ $dirname="C:/xampp/htdocs/PHP-practice/testDir"; //手作業修正済み read_directory($dirname); ?> どなたかよいアドバイスを頂ける方がいらっしゃいましたら、よろしくお願いいたします。

    • ベストアンサー
    • PHP