[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 メーリングリストの案内