トップページphp
1001コメント300KB

【PHP】下らねぇ質問はここに書き込みやがれ 45

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/04/27(金) 10:02:42ID:H9gF1SfB
まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り

◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 44
http://pc11.2ch.net/test/read.cgi/php/1176364487/

◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。

◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0726nobodyさん2007/05/09(水) 02:51:53ID:???
俺からしたら>>707は暗号だ・・・
0727nobodyさん2007/05/09(水) 02:59:12ID:???
>>724
>>708は?

>>710
しばらく考えなきゃ書けない時点であまり価値はないよw
0728nobodyさん2007/05/09(水) 03:02:31ID:???
>>725
日本では英文科出ても英語はなせない、技術系の専攻でもプログラム書けないなんてよく聞くけど。
卒業の厳しいアメリカではそんなことないのかと思っていたが違うんだな。
0729nobodyさん2007/05/09(水) 03:05:12ID:???
経験者募集!って一言書けばいいだけじゃね?
07307242007/05/09(水) 03:06:16ID:???
>>727
見えてなかったorz
0731nobodyさん2007/05/09(水) 03:18:09ID:???
>>706を条件文と配列だけで書こうと思ったがうまくできなかった。
もし書ける人いたら今後の参考に使いたいからよろしゅう。
0732nobodyさん2007/05/09(水) 03:20:33ID:???
誰が見ても分かりやすい素直なプログラム書ければOK
オナニープログラマーはいらん
0733nobodyさん2007/05/09(水) 03:22:33ID:???
この板見てるのって趣味でやってるオナニープログラマーだけじゃないの?w
0734nobodyさん2007/05/09(水) 03:23:28ID:???
>>731
ほい

$nums = range(1,1000);
if ($a = $nums[0] % 3 == 0) echo 'Fizz';
if ($b = $nums[0] % 5 == 0) echo 'Buzz';
if (!$a && !$b) echo $nums[0];
echo '<br/>';
if ($a = $nums[1] % 3 == 0) echo 'Fizz';
if ($b = $nums[1] % 5 == 0) echo 'Buzz';
if (!$a && !$b) echo $nums[1];
echo '<br/>';
if ($a = $nums[2] % 3 == 0) echo 'Fizz';
if ($b = $nums[2] % 5 == 0) echo 'Buzz';
if (!$a && !$b) echo $nums[2];
echo '<br/>';


以下$num[999]までやればおk
0735nobodyさん2007/05/09(水) 03:25:52ID:???
1000に増えててワロタ
0736nobodyさん2007/05/09(水) 03:28:09ID:???
range(1,1000)とか無駄にメモリ喰うだけだろバッキャローが
素直になれよ
そして四つんばいになれよ
0737nobodyさん2007/05/09(水) 03:31:23ID:???
倍数判定で毎回modするより
カウンタを何種類か持たせて0判定の方が速そう
0738nobodyさん2007/05/09(水) 03:34:25ID:???
それはいいね
速いかとか効率いいかは分からんけど違う手法でやってみるのも面白そうね
0739nobodyさん2007/05/09(水) 03:50:10ID:???
作ってはみたけれど、ネタとしても面白くなかった…
$expr = '';
for ($i = 1; $i <= 100; $i++) {
$expr .= <<< TEXT
if (¥$a = $i % 3 == 0) echo 'Fizz';
if (¥$b = $i % 5 == 0) echo 'Buzz';
if (!¥$a && !¥$b) echo $i;
echo '<br/>';
TEXT;
}
eval($expr);
0740nobodyさん2007/05/09(水) 03:51:09ID:???
え,それは何のために・・・?
0741nobodyさん2007/05/09(水) 05:43:07ID:???
こんなん

for ($i = 1; $i <= 100; $i++, $s = ($i % 3 == 0) ? "Fizz" : "", $s .= ($i % 5 == 0) ? "Buzz" : "", $s = ($s != "") ? $s : $i) echo $s."<br>\n";
0742nobodyさん2007/05/09(水) 05:45:53ID:???
>>710>>712
ああ、なるほど。こういう人が>>706のリンク先で書かれてる
> 自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。
という現場で使い物にならないバカちんなんだ。
まさかそんな人が…と思ったが実によく理解できた。
0743nobodyさん2007/05/09(水) 05:47:30ID:???
>>741
>>707を無理やり1行で書いただけじゃんww
0744nobodyさん2007/05/09(水) 06:07:58ID:???
>>742,743
実は会社で「お前が一番使い物にならない」と言われてんじゃw
0745nobodyさん2007/05/09(水) 06:10:50ID:???
>>741
っていうかこんなコード、仕事じゃ使えないだろ。
0746nobodyさん2007/05/09(水) 06:25:39ID:???
もうわかったから、実は会社で「お前が一番使い物にならない」と言われてるって
0747nobodyさん2007/05/09(水) 06:43:56ID:6zAvWwo5
ソースからリンク先アドレスを抽出したいのですが
いい方法ないですか?
0748nobodyさん2007/05/09(水) 06:53:55ID:???
>>736
いまどき1000個の配列でメモリ気にされてもね
どんだけショボイマシン使ってるんだ
0749nobodyさん2007/05/09(水) 06:58:24ID:???
そういう問題じゃないだろう…
カウントするだけのために配列作ること自体がセンスない
0750nobodyさん2007/05/09(水) 07:34:19ID:???
処理が分かりやすくてバグが出にくいようになってればどっちでもいいよ
0751nobodyさん2007/05/09(水) 08:54:57ID:MkwX/1Mg
メールボックスのメールにPHPでフラグをつけたいのですがうまくいきません。
現在はまた関数をチェックしてテストしてる段階なのですが、例えば、

1 簡単なスクリプトでヘッダ一覧を取得してみる→既読フラグは0
2 別のスクリプトで本文を取得してみる→オプションを指定しない場合既読フラグがつくはず
3 もう一度ヘッダ取得→既読フラグは0のまま
4 意図的にフラグをつけてみる→imap_setflag_full前後で既読フラグは0→1に変わったのを確認
5 もう一度ヘッダ取得→既読フラグは0のまま(0に戻ってる?)

ブラウザからの操作なので履歴が表示されているのかとも疑ったのですが、そうではないようです。
メールボックスがある鯖の設定も関係してるのか・・・一応複数のメールボックスで試したのですが。
上記のような手順でつけたフラグって固定しないもんなんでしょうか。。
0752nobodyさん2007/05/09(水) 09:03:49ID:???
>>751
よく分からんけど、切断時に更新処理みたいなのはされてるのかな
0753nobodyさん2007/05/09(水) 09:06:58ID:izHSsw10
もとのログがサニタイズされたりされなかったりしてるデータを弄るときに
htmlspecialchars($str, ENT_QUOTES)かけると
< → &lt; → &amp;lt;
って当然なっちゃうんだけどサニタイズ済みの時は弄らないにはどうすればいいの?
07547512007/05/09(水) 09:40:37ID:MkwX/1Mg
>>752
明示的な更新はしていません。
オプションで「更新しない」を指定できるのを確認してるので
特に指定しなければ更新されるはずだと思っているのですが・・

>>753
自前で処理するしかないんじゃないですかね。
&で分割して、各要素にhtmlspecialchars()をかけ、&をつけて文字列に戻す、みたいな。
0755nobodyさん2007/05/09(水) 09:45:30ID:???
>>754
PHPの処理をPOP3のコマンドの対応を考えてみる。
なにか不足してないか?

まあ、ソースを晒さずにどこまで進むか試してみようw
0756nobodyさん2007/05/09(水) 10:15:42ID:???
>>753
エスケープされたログとされていないログが混在しているのなら、
ログにエスケープするという、仕様を変えたほうが
良いと思う
0757虚弱PHP2007/05/09(水) 10:51:14ID:???
>>753
一番の問題は「もとのログがサニタイズされたりされなかったりしてるデータ」があるってことだね。
教科書通り、高木氏からサニタイズいうなって言われる状態。

htmlspecialchars_decode を使って一度サニタイズ前のデータに戻してから、
htmlspecialcharsすればいいんじゃあるまいか。
0758nobodyさん2007/05/09(水) 12:00:42ID:QoYhDnaM
cronを使ってメールを定期配信しているのですが、
URLに直接アクセスしたらメールが送信されるわけで
いたずらなどされないか心配です。

この場合、連続送信の対応はどうしたらいいのでしょうか?
クッキーを発行して制御する方法で良いのでしょうか?
07597512007/05/09(水) 12:09:45ID:MkwX/1Mg
>>755
ありがとうございます。レス遅れてすみません。
しばらく調べていたのですがやはり・・
ソースはあまりに単純なんでアレですが以下です。
お手数おかけしますm(_ _)m

no=1のメールに既読フラグをつけるスクリプト(部分)
$mb = imap_open(MAILBOX, USER, PASS); #接続
imap_setflag_full($mb, 1, "\\Seen"); #1番目のメールに既読フラグ
$ov = imap_fetch_overview($mb, 1); #1番目のメールヘッダ取得
echo $ov[0]->seen; #既読フラグの有無を表示
imap_close($mb); #クローズ

表示は「1」(既読フラグがつけられた)
次にヘッダ一覧取得のスクリプト(部分)

$mb = imap_open(MAILBOX, USER, PASS); #接続
$ov = imap_fetch_overview($mb, 1); #1番目のメールヘッダ取得
foreach($ov as $key => $value)
echo $key . ":" . $value . "\n";

一覧が表示されるが既読フラグ部分は「seen:0」になっている。
これだけです・・
ヘッダやフラグの取得以外に、メールの削除などはうまくできています。
あと今更ですが環境はphp5とwindowsですm(_ _)m
0760nobodyさん2007/05/09(水) 12:18:06ID:???
>>758
cronだけで実行するなら、ウェブからアクセスできないところに
スクリプトおきなよ。
0761nobodyさん2007/05/09(水) 12:28:49ID:???
>>758
URLにアクセスって
それcronじゃないだろ
0762nobodyさん2007/05/09(水) 12:33:07ID:???
>>758
スパム業者の方ですか?
ローカルからのアクセスかどうかをチェックする機能を付け加えるべし。

>>761
どの場所においてもcronなんて使えるわけだが。
0763nobodyさん2007/05/09(水) 12:57:38ID:???
CLIは使えないの?
0764nobodyさん2007/05/09(水) 13:31:14ID:???
WindowsXPでXAMPPでPHP5でPHP勉強中なのですが、

unlink使うと、Permission deniedエラーがでます。

htdocsに直接ファイルおいて、読み取り専用のチェックも外してるのですが、なぜ解決できないのかわかりません。
0765nobodyさん2007/05/09(水) 13:38:24ID:???
>>764
前後のソースちょっとだしてみ
0766764です2007/05/09(水) 13:43:38ID:5TpInCe7
$filepointer = fopen("php_dailylog.dat","a");
$filepointertmp = fopen("php_dailylog.tmp","w");

flock($filepointer, LOCK_SH);
flock($filepointertmp,LOCK_EX);

fputs($filepointertmp,$time.$dailylog. "\n");
while($row=fgets($filepointer)){
fputs($filepointertmp,$row);
}

flock($filepointer, LOCK_UN);
flock($filepointertmp, LOCK_UN);
unlink("php_dailylog.dat");
rename("php_dailylog.tmp","php_dailylog.dat");
fclose("php_dailylog.dat");
こんなかんじです。
0767nobodyさん2007/05/09(水) 13:48:20ID:???
fclose($filkepointer);
unlink(ry
0768764です2007/05/09(水) 14:04:07ID:???
>767
ありがとう御座います。

unlinkのエラーは消えたのですが、以降のエラーがでて、鯖が固まってしまいました(ノ_-;)

修行してきます
0769nobodyさん2007/05/09(水) 14:26:01ID:???
3つの入力フォームがあるとして、メールを送信する場合なのですが
mb_language("Japanese");
mb_internal_encoding("SJIS");
$name = $_POST["name"];
$mail = $_POST["mail"];
$message = $_POST["message"];
$from = "From: " . $name . "<" . $mail . ">";

mb_send_mail($mailto, $subject, $message, $from);
これでいいと思うのですが、送信する前に print $from; をしてみると
<$mail>が表示されないのです。
送信されたメールの送信元は<$mail>になってるいるのですがそういう仕様なのでしょうか?

それと、半角のみの投稿をさせない場合に文字数とバイト数を比較する方法というのを見たのですが
if(strlen($message) == mb_strlen($message)){ exit; }
とすれば大丈夫でしょうか?
0770nobodyさん2007/05/09(水) 14:48:16ID:???
>>769
print $from;で表示されないのはわかりませんが
送信されたメールで$nameが表示されないのは
日本語に対してMIMEエンコーディングしてないからじゃない?
$name = mb_encode_mimeheader($name);
半角チェックはただexit()ってのも冷たい気がするけど
構文的にはそれでもよいのでは。
07717612007/05/09(水) 15:05:57ID:???
>>762
いやいや
cron使ってわざわざhttpサーバにアクセスするのも変じゃない
普通素直にスクリプト起動するだけだからなぜURLにと思ったの
0772nobodyさん2007/05/09(水) 15:25:38ID:???
>>771
レンタルサーバならそういう事情もあるでしょ。
public_html以下しか接続許可していないサーバも存在するだろうし。
cronが使えるようなサーバがそんな気の利かない設定するわけないけど。
0773nobodyさん2007/05/09(水) 16:27:05ID:???
>>770
エンコードすると中身はISOなんたらかんたらとなって
人が理解できないようなものになるのはこれで正しいですか?

後、exit()だけなのは手っ取り早く1行で抑えたかったのでこの書き方になりました。
0774nobodyさん2007/05/09(水) 16:32:08ID:???
win環境でphpからdosコマンドを使いたいのですが、
むりですか?
07757742007/05/09(水) 16:32:49ID:D8ftPzG/
CLIならいけるとおもうんですがどうなんでしょうか?
やっぱりlinux上できかできないのかな\\\
0776nobodyさん2007/05/09(水) 16:41:32ID:???
>>774
exec()とかで出来るんじゃないの?
win環境詳しくないから知らないけど
0777nobodyさん2007/05/09(水) 16:45:11ID:???
`dir`で普通にできたよ
0778nobodyさん2007/05/09(水) 16:51:54ID:D8ftPzG/
まじっすか、ありがとうございます。
XPのOS再インストールがおわったらためしてみます
0779nobodyさん2007/05/09(水) 16:55:58ID:???
試すなり調べてから聞けよ・・w
0780爆音で名前が聞こえません2007/05/09(水) 17:20:39ID:xxzAywl/
$name[0] = "tanaka tarou";
$name[1] = "satou tarou";
$name[2] = "tanaka zirou";
とします
それぞれにログインネーム(氏を使用、同じ苗字は数字で区別)を作成したくて
以下の関数を作成しました

function mk_login_name($name){  //forで人数分回す、引数は$name[$i]
 $split_name = explode(" ", $name);
 $login_name = $split_name[0];  //スペースで分割して一つ目(氏)をログインネーム候補に

 $count[$login_name]++;     //連想配列でログインネーム候補をカウント
 echo $count[$login_name];   //カウントのテスト表示
 if($count[$login_name] >= 2)  //2回目以降のカウントがあった場合には氏の後にカウント数を付ける
  $login_name = "$login_name"."$count[$login_name]";

 return($login_name);
}

$name[2]が入った時は$count[$login_name]が2になってログイン名がtanaka2になると思ったら
カウントテストは全て1でした
どこがおかしいのでしょうか?
07817532007/05/09(水) 17:30:07ID:izHSsw10
>>754 >>756-757
ログ読む時に全部デコードして表示時にエンコードするっていう一番の基本線が
確実ですね そうすることにします
ありがとうございました
0782nobodyさん2007/05/09(水) 17:33:00ID:???
>>780
1回のリクエストの中でそのカウント方式が完結するなら、関数内の初めの部分に
static $counter = array();
をして、$count[$login_name]++;の部分を
if (isset($count[$login_name])) {
 $count[$login_name] = 0;
} else {
 $count[$login_name]++;
}
に変える。
0783nobodyさん2007/05/09(水) 18:02:24ID:???
>>769
>これでいいと思うのですが、送信する前に print $from; をしてみると
><$mail>が表示されないのです。

単に、HTMLの要素カッコとしてブラウザが認識してるだけでしょ。
0784nobodyさん2007/05/09(水) 18:08:18ID:???
>>783
ならないうちはHTMLソース見ないでよくやる失敗だよね
0785爆音で名前が聞こえません2007/05/09(水) 18:30:18ID:xxzAywl/
>>782
試してみましたがログインネームはtanaka, satou, tanakaでした

for($i = 0; $i <= 2; $i++){
 $login_name[$i] = mk_login_name($name[$i]);
}
↑のように人数分関数を動かしてその間中カウントしたいのですが
1回のリクエストの中でそのカウント方式が完結してよいのでしょうか…?
0786爆音で名前が聞こえません2007/05/09(水) 18:36:00ID:xxzAywl/
>>782
すいません、解決しました
カウント部分は未変更で意図した結果になりました
07877822007/05/09(水) 18:38:25ID:???
スペル間違ってた
×static $counter
○static $count

つーか、1回のリクエストの中でカウント方式が完結したら、普通はダメだわな。
どんな仕様・設計にしてるか知らんが。
0788nobodyさん2007/05/09(水) 19:07:52ID:???
XAMPPの最新版使って

<?php
function showString($value, $num, $delim){
for($i=1;$i<=$num;$i++){
print($value.$delim);
}
}
showString('だるまさんが転んだ!',5,<br />');
?>

と入力したら真っ白(エラーなんたらも無し)になったけど

Why?
0789nobodyさん2007/05/09(水) 19:13:30ID:???
ブラウザのデフォルト文字色が白
0790nobodyさん2007/05/09(水) 19:15:26ID:???
for文の前にprintを書いてちゃんと値が渡ってるかどうか確認しる
つか<br />'の前に'が無いんだが
これが原因だったら2chに書き込む前に5分考えろ
0791nobodyさん2007/05/09(水) 19:23:49ID:???
>>790

5分考えたら分かったよ

'が無かったね
0792nobodyさん2007/05/09(水) 19:32:36ID:???
そろそろまたID表示強化月間だと思うんだ
0793nobodyさん2007/05/09(水) 21:52:45ID:???
>>792
OKブラジャー
0794nobodyさん2007/05/09(水) 22:55:53ID:???
今朝の話題がはてなでも話題に
ttp://b.hatena.ne.jp/entry/http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
0795764です2007/05/09(水) 23:09:58ID:zHM/pvx9
かなりアフォな質問だと思うのですが、

$string = "http://abc.com/http://abcd.com/";;
print(mb_eregi_replace('(http://|https://)[a-z0-9./_\-]+','<a href="\0">\0</a><br/>',$string);
で、http://abcd.com/がリンクされません。二回目以降どうすればいいのでしょうか?
0796nobodyさん2007/05/09(水) 23:17:22ID:???
>>783
なるほど! すっきりしました。
ありがとうございました。
0797nobodyさん2007/05/09(水) 23:20:52ID:???
初心者はapache、php、mysql全部インストーラー無しでやってみれと言いたい
0798nobodyさん2007/05/09(水) 23:21:11ID:???
>>794
最短解はこの辺?
$i=0;while($i<100)echo(++$i%15?($i%5?($i%3?$i:"Fizz"):"Buzz"):"FizzBuzz")."\n";
1byteでも短くするなら少々反則を入れて
while($i<100)echo(++$i%15?($i%5?($i%3?$i:Fizz):Buzz):FizzBuzz)."\n";

剰余計算なしの手法としてはこの辺りか。
$s = array(0,0,1,0,2,1,0,0,1,2,0,1,0,0,3);
$f = array("%d","Fizz","Buzz","FizzBuzz");
$i = 0;
while($i <100) printf($f[$s[$i%15]]."\n", ++$i);
0799nobodyさん2007/05/09(水) 23:24:05ID:???
俺はもうだめかもしれない・・・
ついにオナフォールを買ってしまった・・・
風俗には今まで全然いったこと無かったのに
何でいきなりオナフォール・・・

まだ風俗の方が健全な気がするぜ!
08007992007/05/09(水) 23:26:39ID:???
誤爆嶋ssssssssssssss
うわがああああああ忘れてくれええええええええええええええ
0801nobodyさん2007/05/09(水) 23:27:11ID:okhokTRP
>>797
インストーラーなんて元々ないんだけど?
0802nobodyさん2007/05/09(水) 23:29:36ID:???
あるじゃん
0803nobodyさん2007/05/09(水) 23:33:30ID:???
PHPのインストーラは見たことあるけど
MySQLとApacheのインストーラなしって
Windowsであるの?
0804nobodyさん2007/05/09(水) 23:34:33ID:???
あるじゃん
0805nobodyさん2007/05/09(水) 23:39:16ID:okhokTRP
ドザの話か・・・・
0806nobodyさん2007/05/09(水) 23:55:24ID:???
Apache-win用のインストーラー無しは無いぽ
ビルドするかmsiを展開できるツール使えばできそうだが
0807nobodyさん2007/05/09(水) 23:55:41ID:???
>>799
風俗の前にオナホでも全然おかしくないだろ
むしろ風俗前のレッスンと考えるんだ
0808nobodyさん2007/05/10(木) 00:28:42ID:i4wrMZ/Q
wikipediaなどでは
hogehoge.com/ほげほげ
等、URIに日本語を直接記述していますが、
何故URLエンコードしなくても問題が起こらないのでしょうか?
0809nobodyさん2007/05/10(木) 00:32:52ID:???
ブラウザがエンコードしてくれてるんじゃないか?
0810nobodyさん2007/05/10(木) 00:37:19ID:???
>>806
あるじゃん
http://brandleadershipmarketing.com/apache/

つかサービス登録してくれてApache Monitor入れてくれるくらいの違いしかないだろが,インストーラ
0811nobodyさん2007/05/10(木) 00:38:11ID:???
同上でブラウザがエンコードしてるんだと思う
FireFoxだと日本語で入力しても表示されない
0812nobodyさん2007/05/10(木) 00:43:33ID:???
>>809,811
本当ですね
まさかそんな答えだったとは…
ありがとうございました
08137952007/05/10(木) 01:15:59ID:???
自分なりに考えたのですが動きません…
$string = "http://abc.com/http://abcd.com/";;
while(mb_eregi('(http://|https://)[a-z0-9./_\-]+',$string)){
$string = mb_eregi_replace('(http://|https://)[a-z0-9./_\-]+','<a
href="\0">\0</a><br/>',$string);
0814nobodyさん2007/05/10(木) 01:23:06ID:qTUopfwt
>>813
何がしたいの?
URLにリンク貼るだけならwhileいらなくね?
二回目以降って何の二回目以降?

目的がわからないから答えようないよ
0815nobodyさん2007/05/10(木) 01:50:15ID:???
phpの中にjavascriptを記述する時のいい方法ないですか?
$code = "
var a = \"abc\";
";
いちいち"や'に気を遣うのが嫌になりました
0816nobodyさん2007/05/10(木) 01:54:17ID:qTUopfwt
print <<<EOF

EOF;
0817nobodyさん2007/05/10(木) 02:09:35ID:ucjeMPs6
GETの引数は、普通「&」で区切られますが、
「&」を区切り文字としないで、
GET引数の数を1つに固定…なんて事はできるんでしょうか?

とりあえず.htaccessで以下のように書いて回避しています。

php_value arg_separator.input "\"

"\"にしたのは、RFC2396読んで多分URLには使われないだろう踏んだからなんですが。
(参照元:http://jbpe.tripod.com/rfcj/rfc2396.ej.sjis.txt

この回避策に関しての欠点、もしくは他に良い方法などありますでしょうか。
0818nobodyさん2007/05/10(木) 02:30:02ID:???
>>817
?なんのために??
08198172007/05/10(木) 03:05:09ID:ucjeMPs6
>>818
GET引数に指定したURLをfile_get_contents()で読み取って、
中身を若干加工等して出力しようと考えてます。

イメージはこんな感じ。
http://www.hoge.com/index.php?url=http://www.piyo.com/

例として、以下のような「&」を含んだURLを引数にした場合に
「&」で区切られてしまい、file_get_contents()では
「&」の直前までのパスしか取得できません。

http://www.hoge.com/index.php?url=http://piyo.com/index.php?name=2ch&type=bbs
… echo $_GET['url']; の結果
 理想:http://piyo.com/index.php?name=2ch&type=bbs
 現実:http://piyo.com/index.php?name=2ch

これを、なんとか簡潔に解決できないかなと考えています。
0820nobodyさん2007/05/10(木) 03:18:49ID:???
>>819
どういう実装を想定してるのかわかんないけど。

?url=http%3A%2F%2Fpiyo.example.com%2Findex.php%3Fname%3D2ch%26type%3Dbbs
として渡す。

echo urldecode($_GET['url']); // 'http://piyo.example.com/index.php?name=2ch&type=bbs'
0821nobodyさん2007/05/10(木) 04:06:54ID:???
>>819
id出してるのは偉い!が説明が回りくどくて理解しにくいよ

print_r($_SERVER)してみれ
0822nobodyさん2007/05/10(木) 04:44:47ID:???
>>819
>>820に補足。自分でURLを生成する(a要素のhref属性値に埋め込むなどの)ような場合は、
urlencodeを使うといい。

urlencode('http://www.hoge.com/index.php?url=http://piyo.com/index.php?name=2ch&type=bbs')
→http%3A%2F%2Fwww.hoge.com%2Findex.php%3Furl%3Dhttp%3A%2F%2Fpiyo.com%2Findex.php%3Fname%3D2ch%26type%3Dbbs

これをurldecodeに通してみたらお望みのものが得られる。

もしもブラウザのGETメソッド経由のフォームで得るのであれば、
ブラウザがurlencode相当の処理をしてサーバにリクエストを投げてくるので、
それを適当に処理すればよろしい。
0823nobodyさん2007/05/10(木) 05:03:39ID:???
>>795
$string = "http://abc.com/http://abcd.com/";;
$string = preg_replace('/(https?|ftp)(:\/\/[[:alnum:]\+\$\;\?\.%,!#~*\/:@&=_-]+)/', '<a href="\\1\\2">\\1\\2</a>', $string);
echo $string;
0824nobodyさん2007/05/10(木) 06:27:37ID:???
http://journal.mycom.co.jp/news/2007/05/08/008/
迅速なアップデートを! セキュリティ対策が施されたPHP 5.2.2/4.4.7リリース

アップデートが面倒くさいのですが
やはりアップデートすべきでしょうか?
0825nobodyさん2007/05/10(木) 06:36:04ID:???
そんなの使用目的による。
デバッグにしか使わないなら別にアップデートしなくていい。
■ このスレッドは過去ログ倉庫に格納されています