PHPにて渡されたアドレスを圧縮するプログラムを作成しましたがうまくいきません問題点を指摘してください。

<?php
$adress = $_POST["adress"];
$siyomoji = 'abcdefghijklmnopqrstuvwxyz0123456789!#$%&()=~{`}+_';
$mazemaze = (str_shuffle($siyomoji)) ;
$a = mb_strimwidth($mazemaze,0,5);
$file = fopen("http://×××.com/".$a,"w+");
fwrite($file,"<meta http-equiv=\"refresh\" content=\"0; url=".$adress."\">");
print("http://×××.com/".$a);
?>
というのを実行すると
Warning: fopen(http://×××.com/tez}7) [function.fopen]: failed to open stream: HTTP wrapper does not support writeable connections in /home/~~~/public/www/×××/a.php on line 6
Warning: fwrite(): supplied argument is not a valid stream resource in /home/~~~/public/www/×××/~~~/a.php on line 7
というエラーが出てきました

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2009/05/14 00:04:45
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tdoi No.1

回答回数174ベストアンサー獲得回数75

ポイント100pt

エラーメッセージそのままだと思いますが、やりたいことは何ですか?

http://example.com/compress.php

のようにアクセスできるプログラムを用意し、このプログラムに、http://too.long.example.com/too/long/hogehogeのように長いURLをPOSTすると、

http://example.com/abcdef

というような出力を出し、ユーザが、

http://example.com/abcdef

にアクセスした際は、http://too.long.example.com/too/long/hogehogeにリダイレクトするようなことをやりたいのでしょうか?


もしこれを希望なのであれば、compress.phpがやらなければいけない処理として、http://example.com/abcdefとしてアクセスされるファイルを作成することになります。

このファイルを作成するのに、ファイル入出力関すのHTTPアクセスのラッパーでは書き込みはできないので、

<ドキュメントルート>/abcdefというファイルを書き出さなければいけませんん。


例えばですが、上記のような構造、つまり、compress.phpと出力ファイルが同一ディレクトリであれば、

$file = fopen(dirname(__FILE__) . '/' . $a, "w+");

とでもしてやれば、いいでしょう。


ただ、実際に使うのであれば、上書きされないことなど、そのほかにも考慮する必要はあるとは思います。


何かの参考になれば。

id:takanii

大変ありがとうございました

まるで数学の模範解答のような筋の通った流れのある解答 あなたの言いたいことがスルリと頭の中に入ってきました

自分もこのくらいの文章を書けたらなと思います

2009/05/14 00:04:29
  • id:tdoi
    書き忘れましたが、$shiyomojiにURLに利用できるもののみを指定すべきでしょう。
  • id:takanii
    ふむふむ 詳しく教えていただけませんか?
  • id:takanii
    http://okwave.jp/qa247115.html
    これかな
  • id:tdoi
    そういうことです。
    ランダムで作ってしまうのであれば、英数字だけに限定とかした方が見栄えとかもよいかもですね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません