fopenで半角カナファイル名のサイトファイルを開く方法とは?

このQ&Aのポイント
  • fopenを使用してXP apache2.0系で起動しているサイトの半角カナファイル名のファイルを開こうとしたときに、HTTP request failed! HTTP/1.1 404 Not Foundというエラーメッセージが表示されます。半角カナ部分の取り扱いに関しては、PHP側で変換するか、apacheの設定変更が必要なのか検討しています。
  • 半角カナファイルが配置してあるディレクトリ一覧をブラウザで表示すると文字化けして表示されています。この問題を解決するためには、PHP側での変換やApacheの設定変更を行うか、他の手段を検討する必要があります。
  • ファイル名が半角英数字の場合は問題なくfopenで開くことができますが、半角カナファイル名の場合はエラーメッセージが表示されます。PHP側での変換やApacheの設定変更などの方法を検討し、問題を解決する必要があります。
回答を見る
  • ベストアンサー

fopen で半角カナファイル名

XP apache2.0系 で起動しているサイトのファイルを fopen で開こうと思っています。 タイトルでも触れていますが、ファイル名が半角カナファイル名なんです。 ブラウザで直にパスを打つとダウンロードのやつが開くのでパスは大丈夫だと思います。 fopen で開こうとすると failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found  が出ます。 ファイル名が半角英数字であればfopenは問題ないです。 半角カナ部分の取り扱いだとは思うんですけど (1)PHP側で変換すればうまくいく? (2)apacheの設定変更でうまくいく? どっちなんでしょう?それとも他の手段を用いるべきなんでしょうか? ちなみに そのファイルが配置してあるディレクトリ一覧をブラウザで表示すると 半角カナファイルは文字化けして表示されています。 なので、私は(2)かなと思っているんですけど。

  • 8oowy
  • お礼率85% (6/7)
  • PHP
  • 回答数3
  • ありがとう数6

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

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.3

根拠のない思いつきだけですので、聞き流しでお願いします。 とりあえず、俺なら 以下を試してみます。 ・文字コードを変えてやってみる。 ・urlencode()してみる。

8oowy
質問者

お礼

回答ありがとうございます。 書き込みは省略しますが、色々と試してみて駄目でした。。 貴重なお時間ありがとうございました。

その他の回答 (2)

  • gtx456gtx
  • ベストアンサー率18% (194/1035)
回答No.2

回答になっていませんが・・・ >ファイル名が半角英数字であればfopenは問題ないです。 >半角カナ部分の取り扱いだとは思うんですけど まだまだファイルに名に日本を使って、どのような場合でも失敗せずに利用できる環境は整っていないと思います。 素直に英字と数字のファイルだけを取り扱うようにした方が良いと思います。 「半角カナ部分」は、過去との互換性で残っている文字なので新規にコーディングするなら半角カタカナは取り扱わない方が良いと思います。

8oowy
質問者

お礼

回答ありがとうございます。 半角カナ云々については私ももちろん認識しておりますし 変えてほしいのですが、そんなのものでも仕様なんです。 こちら側吸収できる方法ないものかと。

  • poiuy9801
  • ベストアンサー率59% (59/100)
回答No.1

根本的な問題として、半角カナはトラブルの元なので 少なくともファイル名・ディレクトリ名には使うのはまずいです。 ブラウザで直にパスを打つと開くのは ベースのOSがXPで、なおかつブラウザがIE系だからだと思われます。 # IEはブラウザでありながら、Windowsのファイルのパスとしての文字列を扱えるように独自拡張してしまっているため # Web上では御法度の組み合わせ(半角カナ、半角スペースなどが混じる場合)でもファイルオープンが可能なのです。 ソフト側で処理できるように対処せず、ファイル名をリネームされることを強くお勧めします。

8oowy
質問者

お礼

回答ありがとうございます。 半角カナ云々については私ももちろん認識しておりますし 変えてほしいのですが、そんなのものでも仕様なのです。 winでしか動かなくても構いませんので、fopenが成功する方法ないでしょうか。 最悪そのファイルはPHPでは処理せずに、window.open~で 開けちゃおうと思っています。(これは開けたので)

関連するQ&A

  • fopenでURL内容の取得のエラー

    fopen(<URLを指定>,'r'); としたときにエラーが発生してしまいます。 この現象は環境によって出る場合と出ない場合があります。 以下はいずれもphpinfo()で取得したPHPとApacheのバージョンです。 <エラーが出ない環境> PHP Version 4.2.3 Apache/1.3.27 <エラーが出る環境> PHP Version 4.3.9 Apache/1.3.31 (Win32) PHP/4.3.9 エラーメッセージは以下のようなものです。 Warning: fopen(<ここにアクセスしたURLが表示>): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in <エラーが出ているプログラムと、fopen()の行が表示> よろしくお願い致します。

    • 締切済み
    • PHP
  • file(), file_get_contents(), fopen() がタイムアウトしてしまう

    パスが正しいかどうかを何度も確認しましたが、スクリプトのURLをブラウザで開こうとすると、5~6秒した後、以下のエラーが出ます。 Warning: file_get_contents(読み込むファイルのパス): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in スクリプトのパス.php on line 16 おそらく、file_get_contentsの読み込もうとするファイルが重たすぎるのだと思います(スクリプトのファイルサイズ自体は軽いのですが処理に時間がかかってしまう)。というのも、読み込むファイルの内容を、<?php echo "hello world"; ?> とすると、エラーが出なくなり、正常に読み込んでくれます。また、読み込むファイルは php ファイルで同ドメイン上にあり、このファイルをブラウザから閲覧可能です。 他に、fopen, include, file も試しましたが、同様に上記のようなエラーがでます。これはサーバ側でスクリプトの処理の時間制限を行っているからでしょうか? ちなみに、スクリプトの冒頭に、 set_time_limit(0); 一番最後に set_time_limit(30); をおいてみましたが、結果は同様でした。 もし何か対処方法をご存知の方おられましたら、どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • fgets()でURLを読み込むとエラーになる

    -----url.txt----- http://www.google.co.jp http://www.goo.ne.jp/ ----------------- -----test.php------ $urltxt = fopen("url.txt", "r"); $url = fgets($urltxt); $html = fopen($url, "r"); -------------------- のように、各行にURLが書いてあるテキストファイルを一行ずつ読み込んで、それを引数にしてfopen()したところ、 全てfailed to open stream: HTTP request failed! HTTP/1.0 404 Not Foundとなってしまいます。 print($url)では正しくURLが出力されますし、$urlへの代入を直接$url = "http://www.goo.ne.jp/"としてやれば正常に動作するので、何が原因か分かりません。 テキストファイルは全て半角英数のアドレスのみで、シフトJISで保存しています。 どなたか原因が分かる方、ご教授ください。

    • ベストアンサー
    • PHP
  • preg_matchの 正規表現

    $phperr = failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found ; から、preg_match('   ',$phperr,$match)で、 404だけを取り出すパターン表現を教えてください。お願いします。

    • ベストアンサー
    • PHP
  • fopenが動作しない

    PHPで、別のファイルで取得したファイル名をもとに fopenを使ってファイルを開こうとしているのですが、 どうしてもうまくいきません。 具体的な症状は以下のとおりです。 a.phpの中で、 … $file[2] = "hoge02.xml"; … のように、配列にファイル名を代入します。 これを b.php で require_once('a.php'); とした後 print_r($file); とすると Array([0] => … [2] => "hoge02.xml" [3]…) のように表示されるところまでは確認できました。 しかし、 $file0 = $file[2]; $fp = fopen("$file0", 'r'); とすると Warning: fopen( "hoge02.xml" ) [function.fopen]: failed to open stream: Invalid argument in [b.php の絶対アドレス] とエラーが出てしまい、実行することが出来ません。 そこで、 //$file0 = $file[2]; $file0 = "hoge02.xml"; $fp = fopen("$file0",'r'); とすると実行することが出来ました。 作成しているシステム上、fopenの1つ目の引数には変数または配列を使いたいのですが、 エラーが発生してどうしてもうまくいきません。 自分なりにも似たようなエラーがないか調べたのですが、 それらしいものを見つけることが出来ず、お手上げ状態です。 どなたか解決策をご存じないでしょうか。 ご教授の程、よろしくお願い致します。

    • 締切済み
    • PHP
  • 半角カタカナになってしまう!

    ローマ字でかなを打つときは、今しているようにひらがなが打てます(全角)。これを半角にすると今までは半角英数字が打てていたんですが、どっかをいじったのか、半角カタカナを表示してしまうのです。 どうすれば、半角英数字を打てるようにできるのでしょうか?

  • fopenでファイルがオープンできません

    $fp = fopen(TEST_FILE, "w") としてオープンしようとすると Warning: fopen(mybasic9.txt): failed to open stream: No such file or directory と、オープンしようとしたファイルがない、と出ます そして、そのファイルをあらかじめ作っておくと OKです。 しかし fopen(TEST_FILE, "w") は該当ファイルがあればそれをオープンし 無ければ、新しく作成する、とFopenの仕様に出ています。 これは、今使っているサーバーの問題でしょうか 何か、避ける方法はないでしょうか よろしくお願いします

    • 締切済み
    • PHP
  • fopenでパーミッションエラー

    fopenでパーミッションエラーが出ます。 fopen("../news.htm", "w"); Warning: fopen(../news.htm): failed to open stream: 許可がありません。 fopen("./news.htm", "w"); fopen("../map/news.htm", "w");# mapディレクトリを757にしてOK 上記はOKでした。 ディレクトリ構成は /public_html/sample/mag/test.php # fopenをするファイル sampleを757にしてもエラーが出ました。 fopenで一つ上のディレクトリにファイルを書き込むことは出来ないのでしょうか?

    • 締切済み
    • PHP
  • 半角カナの使用について

    以前はメールやホームページで半角カナを使うと文字化けしたりしましたが、今は使われることが多くなっているように思えます。 実際のところどうなんでしょう。 自分に半角カナを入れたメールを送ると全角カナに変換されています。 ローカルディスクに半角カナをいれたHTMLファイルを作り、ブラウザで見るとそのまま半角カナで表示されます。 まだ使うと不具合が出たりするんでしょうか。 それとも使えるようになったんでしょうか。

  • fopenのmode「w」について

    宜しくお願い致します。 fopenのmode「w」で、ファイルを新規作成しつつ、データを書込みたい場合で、サーバ間でファイルを作成したい場合、http://~では、mode「w」でのファイル作成は出来ないですが、ftp://でのファイル作成は出来るとマニュアルに書いてあるのですが、failed to open streamエラーが発生してファイルが作れません。 PHP.iniで、open_basedirの指定はされておらず、allow_url_fopenはOnになっているのですが・・・。 何卒、ご教授の程、宜しくお願い致します。

    • 締切済み
    • PHP

専門家に質問してみよう