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つ目の引数には変数または配列を使いたいのですが、
エラーが発生してどうしてもうまくいきません。
自分なりにも似たようなエラーがないか調べたのですが、
それらしいものを見つけることが出来ず、お手上げ状態です。
どなたか解決策をご存じないでしょうか。
ご教授の程、よろしくお願い致します。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
print_r で出力したとき
array([0] => … [2] => "hoge02.xml" [3]…)
と [2]=>"hoge02.xml"
ダブルクォーテーションが余計に表示されていますが、多分これが原因だと思います。
[a.php]
<?php
$file[2] = "hoge02.xml";
?>
[b.php]
<?php
require_once('a.php');
print_r($file);
$file0 = $file[2];
if($fp = fopen($file0,'r')) print "OK";
else print "NG";
?>
上記をそのままコピペしてみてください。
wish46さん、ご回答ありがとうございます。
先ほど漸く問題を解決することが出来ました。
どうやらファイル名を代入するとき、
ダブルクォーテーションとファイル名の間に
空白文字が挿入されていたようでした。
sakusaker7さん、asuncionさんにもお礼申し上げたいのですが、
1週間ほどずっと上記のことで1人で頭を悩ませていたので、
一緒に問題を考えてくださる方がいるというだけでも
とても心強かったです。
本当に、ありがとうございました。
No.4
- 回答日時:
require_once('a.php');
print($file[2]);
$file0 = $file[2];
のあとに
file_exists($file0);
でどのような結果になりますか?
この回答への補足
No.3の方への補足に記載したプログラムに
以下のものを追記して試してみました。
- - - - - - - - - - - - 8< - - - - - - - - - - - -
$file0 = $file[2];
//$file0 = "hoge02.xml";
if(file_exists($file0))
{
print("file exists.");
}
else
{
print("file doesn't exist.");
}
$fp = fopen($file0, 'r');
- - - - - - - - - - - - 8< - - - - - - - - - - - -
結果は『file doesn't exist.』と表示されました。
また、1・2行目を
//$file0 = $file[2];
$file0 = "hoge02.xml";
としたところ、『file exists.』と表示されました。
ただ、代入するアドレスに絶対アドレスを
『$file0 = "http://hoge.co.jp/hoge.xml"』
のようにして代入すると『file doesn't exist.』
と表示されました。
基本的に、アドレスは絶対アドレスで指定した上で
使用したいと思っています。
No.3
- 回答日時:
print_r って制御コードとかはどう表示してくれるのでしたっけ?
#3の方の情報のついでに、
if ($file[2] == "hoge02.xml")
という判定をしたときに真と偽のどちらにになります?
この回答への補足
>print_r って制御コードとかはどう表示してくれるのでしたっけ?
試しにa.phpで$file[2]に『\n"hoge02.xml"』を
代入して以下のプログラムを実行してみました。
(質問のご意向に沿っていないかもしれません…違っていたらすみません)
No.2の方へ補足したプログラムの、複数行コメントを取り除いただけのものです。
- - - - - - - - - - - - 8< - - - - - - - - - - - -
<?php
mb_language("Japanese");
require_once('a.php');
print_r($file);
print($file[2]);
$file0 = $file[2];
//$file0 = "hoge02.xml";
$fp = fopen($file0, 'r');
if($feed[2]=="hoge02.xml")
{
print("<br>reading OK<br>");
}
else
{
print("<br>reading FALSE<br>");
}
?>
- - - - - - - - - - - - 8< - - - - - - - - - - - -
実行結果は以下の通りです。
- - - - - - - - - - - - 8< - - - - - - - - - - - -
Array ( [0] => … [2] => \n"hoge02.xml" …) \n"hoge02.xml"
Warning: fopen( \x0a"hoge02.xml" ) [function.fopen]: failed to open stream: Invalid argument in [b.phpの絶対アドレス] on [『$fp = fopen($file0, 'r');』が書かれている行]
reading FALSE
- - - - - - - - - - - - 8< - - - - - - - - - - - -
代入する値を『"hoge02.xml"』のみにした場合も、
print_rとprintで出力した部分の『\n』が取れた以外
同じように表示されました。
printでは中身が表示されていたので、
$file[2]はb.phpで使える変数なのかと思っていました。
偽として認識されていなかったということは、
やはりb.phpで使う変数として有効でないということでしょうか…?
sakusaker7さん、ご回答ありがとうございました。
先ほどなんとか問題を解決することが出来ました。
No.5のご回答へのお礼にも書きましたが、
ファイル名の前に空白文字を挿入していたことが
原因で読み込みが出来なかったようです。
一緒に解決策を探ってくださり、ありがとうございました。
1人で抱え込んでいた問題だったのでとても心強かったです。
No.2
- 回答日時:
> $fp = fopen($file0, 'r');
> として試してみましたが、やはり同じエラーが出てしまいました…
$file0に代入している箇所を含めて、
現在のスクリプトとエラーメッセージを
見せてください。
この回答への補足
以下のプログラムを実行しました。
- - - - - - - - - - - - 8< - - - - - - - - - - - -
<?php
mb_language("Japanese");
require_once('a.php');
print_r($file);
print($file[2]);
$file0 = $file[2];
//$file0 = "hoge02.xml";
$fp = fopen($file0, 'r');
/*
if($file[2]=="hoge02.xml")
{
print("<br>reading OK<br>");
}
else
{
print("<br>reading FALSE<br>");
}
*/
?>
- - - - - - - - - - - - 8< - - - - - - - - - - - -
以上のプログラムを実行すると、以下のように表示されました。
- - - - - - - - - - - - 8< - - - - - - - - - - - -
Array ( [0] =>… [2] => "hoge02.xml"… ) "hoge02.xml"
Warning: fopen( "hoge02.xml" ) [function.fopen]: failed to open stream: Invalid argument in [b.phpの絶対アドレス] on [『$fp = fopen($file0, 'r');』が書かれている行]
- - - - - - - - - - - - 8< - - - - - - - - - - - -
asuncionさん、ご回答ありがとうございます。
No.5のご回答へのお礼にも書いたのですが、
ファイル名を代入する際、ファイル名の前に
空白文字が入っていたことが原因で
ファイルの読み込みが出来ないようでした。
一緒に解決策を考えてくださり、大変感謝しています。
ありがとうございました。
No.1
- 回答日時:
> $file0 = $file[2];
> $fp = fopen("$file0", 'r');
なぜ $file0 をダブルクォートでくくっているのでしょうか?
単に $fp = fp($file0, 'r'); でよいように思うのですが。
この回答への補足
早速のご回答、ありがとうございます。
$file[2] = "hoge02.xml";
とする前に
$file[2] = hoge02.xml;
としており、ダブルクォートを入れたままにしていました。
$fp = fopen($file0, 'r');
として試してみましたが、やはり同じエラーが出てしまいました…
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- PHP 値の取り出し方について教えて下さい。 1 2023/03/31 13:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2つの画像ファイルが異なるファ...
-
PHPでテキストファイルかどうか...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
別ファイルの変数を呼び出した...
-
PHPのif文でその処理を途中で抜...
-
CFileDialogの最初のディレクト...
-
.phpと.incファイルの違いはな...
-
「警告:ページの有効期限切れ...
-
「@$変数」の「@の意味は?」
-
リンク先を隠す方法はないでし...
-
現在位置より2つ上のディレク...
-
Subversionのリポジトリの削除
-
VB6にてメールを送信する方法
-
パースエラーとは?
-
XAMPPでSQL文を流すとフリーズ...
-
データ送信をボタンを押さずに...
-
【file_exists】ファイルが存在...
-
URLが.PHPってどういう...
-
Smarty includeでテンプレート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2つの画像ファイルが異なるファ...
-
stat failed
-
PHPでFilename cannot be empty...
-
XMLのロードに失敗する
-
ファイルの行数取得
-
日本語が文字化けしないよう読...
-
ファイル名は、数字の「0」(...
-
PHPで特定の文字列のみ抽出し、...
-
php4、php5によるimplode()、fi...
-
テキストファイルの読み込みと...
-
CSV出力
-
二次元配列のソートのやり方が...
-
phpのftp_get()でエラーが出ます。
-
日本語のファイルが開けない
-
Smartyで吐き出されたhtmlソー...
-
PHPでの別のサーバーのテキスト...
-
ファイルについて・・・。
-
ファイルの読み込み方法について
-
TSVファイルをCSV形式に変換したい
-
PHPでテキストファイルかどうか...
おすすめ情報