[PHP-users 17681]Re: ファイルが作成できない(was Re:アプレットとPHPとの通信)

Y. Shubiki shubiki @ shubiki.co.jp
2003年 9月 4日 (木) 16:08:27 JST


吉田です。色々とアドバイス有難うございます。
説明不足で誠にすみません。次のようなプロセスで確認しました。

(1) a.html
<html>
<body>
<form method="POST" action="xxx.php">
<input type="submit" name="submit">
<input type="hidden" name="aaa" value="bbbbbbbbbb">
</form>
</body>
</html>

(2) xxx.php
<?php
$fp = fopen("test.txt", "w+");
fwrite( $fp, $HTTP_POST_VARS["aaa"] );
fclose( $fp );
?>

(3) xxx.php
<?php
phpinfo(); 
?>

(4) アプレット(出力部分。phpURLには、http://host:80/xxx.php と指定)
Serializable objs[];
URLConnection con = phpURL.openConnection();
con.setRequestProperty( "Content-Type","text/plain" );
ObjectOutputStream out = new ObjectOutputStream(con.getOutputStream());
int numObjects = objs.length;
for(int x = 0; x < numObjects; x++){
     out.writeObject( objs[x] );
}

(1)〜(4)のファイル, test.txtは全てWebサーバーの同一ディレクトリに入れ、
ファイル、ディレクトリともに777にしました。
これに、ネットワーク上のクライアントからアクセスし、

・(1)を表示して、(2)を呼び出すと、test.txtに書き込まれます。
・(1)を表示して、(3)を呼び出すと、phpinfo()の内容が表示されます。
・(4)を呼び出し、そこから(2)を呼び出すと、test.txtに書き込まれません。
・(4)を呼び出し、そこから(3)を呼び出すと、phpinfo()が表示されません。

以上です。
過去ログも併せ拝見した範囲で、php側では、問題無く受け取れるようですので、
どうもアプレット側の問題のようです。

そちらを研究したいと思いますので、とりあえずここでこのメーリングリストへの
質問は終了とさせて頂きたいと思います。どうも有難うございました。


> 重松です。こんにちは。
> 
> > fopenのプロセスは、他のもので書き込みを確認しましたので、パーミッションは
> > 問題ないようです。ただ、$HTTP_RAW_POST_DATA は、PHP4.0.6では取得できない
> > ようなので、他のパラメータで確認しました。
> 
> まずは問題を切り分けることを考えてください。
> 
> それに、できない、確認した、では、何も第三者には分かりません。
> 具体的に、時系列的に、テストしてスクリプトや、その結果をコピペして、状況
> をもっと分かりやすく記述してください。
> 
> 例えば、shell (CLI) で実行するのと httpd 経由 (DSO) だと、実行者が違いま
> すから、確認したことにはなりません。
> 
> > また、xxx.phpを <? phpinfo(); ?> だけのファイルにして試してみましたが、
> > 表示がされないようです。
> 
> は、開始部分が short tag になってますが、本当にそのままですか? short tag 
> は有効ですか? 出力はどのように確認しましたか?
> 
> これじゃあ何も分からないので、
> 
>  curl 'http://yourhost.example.com/test-info.php' | od -tx1
> 
> とでもやって、いったいどういう内容が帰っているのかダンプしてみてください。
> 
> short tag が無効になっている、あるいは、セキュリティ上の理由から、
> phpinfo が殺してある、いろいろな理由がありすぎて絞り込めません。
> 
> [PHP-users 17640] もパーミッションやパスの問題でしたので、もしかしたらヒ
> ントがあるかもしれません。
> 
> とりあえず、原因を切り分けるために、追記が可能であることを調べることをお
> 勧めします。
> 
> <?php
> $fp = fopen('/path/to/working/directory/test.txt', 'a');
> if ($fp) {
>  fputs($fp, "Test!\n");
>  fclose($fp);
> }
> else {
>  die('ファイルが開けなかったみたい');
> }
> ?>
> 
> あらかじめ、666 のパーミッションで、'/path/to/working/directory/test.txt' 
> を作っておきましょう。
> 
> 成功すると、Test! という行がどんどん追記されるはずです。



PHP-users メーリングリストの案内