【PHP】下らねぇ質問はここに書き込みやがれ 30
レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん
2006/10/05(木) 01:38:25ID:y1WWhz/pまず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆質問する場合の注意
1. 自分のIDを表示させること。(メール欄に何も記述しないでください)
2. サーバーのOS、WebサーバーとPHPの種類やバージョン等を明記すること。
3. 己の行った操作、変更などを詳しく明記すること。
4. エラーメッセージはそのまま表記すること。「エラーが出ます」では絶対分かりません。
5. 質問者としても態度をわきまえること。
6. 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・質問者は必ずIDを表示させてください。(メール欄に何も記述しないでください。)
・2回目以降は最初に質問した際のレス番号を名前欄に入れてください。
(逆に回答者は質問者に対して>>(アンカー)をつけて答えてください。)
・解決しなくても回答をもらった場合はお礼を言う。
(荒らし、煽りは除く。逆に煽られたときも、無闇に反論せずスルーすべし)
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークはそれぞれの該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0904nobodyさん
2006/10/24(火) 03:52:46ID:???佐賀県.CSVをループさせてる間、人名を<a href="hoge.php?query=xxx">で囲ってxxxにエンコした人名を入れておく、
受け取り側では$_GET['query']を確認してから該当文字列を含む列を配列に格納、その配列をぐるぐるしながら表示。
とか?
0905nobodyさん
2006/10/24(火) 04:06:20ID:???0906nobodyさん
2006/10/24(火) 04:11:00ID:???0907nobodyさん
2006/10/24(火) 04:30:03ID:???0908nobodyさん
2006/10/24(火) 04:34:21ID:???質問があるならすればいいかと。
0909nobodyさん
2006/10/24(火) 04:48:35ID:+34GEzTNhoge.comに向けられた、自宅内PCから発射されたPOSTを遮断する方法がわかりません。
何かヒントとなるものはございませんでしょうか?
『自宅内PCのindex.phpのコード』
<form action="http://hoge.com/index.php>
<input type="submit" name="submit" value="submit">
</form>
『hoge.comのindex.phpのコード』
if (isset($_POST[submit]))
{
echo "他サイトからポストがありました";
}
0910nobodyさん
2006/10/24(火) 04:57:49ID:???REFERERを見て自分のサイト以外だったら弾くとかくらいじゃ…
もっとも、昨今はREFERERを返さない設定にしちゃってる
ブラウザやセキュリティソフトが多いのであまり十分とは言えないけど。
あとはセッションを使って、直前の送信ページ表示の情報を持ってる
ユーザのPOST以外は受信不可にするとか。
もっともこれも1度送信ページを表示してから実行されるとスルーしちゃうけど。
それを完璧に防ぐ方法は理論上存在しないと思う。
しょせん、クライアントのブラウザを介しての処理だからねぇ。
クライアントが「送信元のページ」を正確に渡してくれないことには不可能で、
クライアント自体をユーザが自作可能である以上、そんな手法は存在しない。
0911nobodyさん
2006/10/24(火) 05:12:21ID:???有効期限で一定時間以後は無効にもできるし。
0912nobodyさん
2006/10/24(火) 05:16:19ID:???データ本体をサーバ側に置いとけば改竄はそうそうできないよ。
0913nobodyさん
2006/10/24(火) 05:26:08ID:???hiddenを仕込む、同時にその値をDBに突っ込む、
受け側(hoge.comのindex.php)で値を受取る時にDBを確認、
hiddenで送られたタイムスタンプと一致したら正規のPOST、とかどう?
一定時間過ぎたらCronなりでDBを掃除
0914nobodyさん
2006/10/24(火) 05:33:41ID:???textフィールドに入力されるテキストが値として混在しますが
こういうのはどこで分割するのがいいんでしょうか?
例えばこんなやつです。
<input type="checkbox" name="q1[]" value="1">選択肢1
<input type="checkbox" name="q1[]" value="2">選択肢2
<input type="checkbox" name="q1[]" value="3">選択肢3
<input type="checkbox" name="q1[]" value="4">その他<input type="text" name="q1[]">
@HTMLの時点でname属性を変える(q1_4_txtなど)
ADBのテーブルを数値用と文字列用に2つ作り、POSTされたデータをPHPで判定して振り分ける
BDBにまとめて放り込み、selectするときに上手いことやる
とりえあず@のようにnameを変え、select文を
select name, value, count (value) from table group by name, value
とし、PHPで全件に対して
valueが数値の場合: $result[name][value] = count;
valueが文字列の場合: $result[name][] = valie;
と代入して使用しています。
もしかして効率が悪いことしているのかと不安に感じるので、皆さんは普段どうしていますか?
こういうフォームを扱う時のコツなどありましたら教えてください。
0915nobodyさん
2006/10/24(火) 05:34:47ID:???パターンは防げないけどね。
>>909が何をどこまで厳密に防ぎたいのかが分からないので何とも。
送信前に1度でも正規ページを表示してくれれば問題なし、って話ならセッションで十分でしょ。
0916nobodyさん
2006/10/24(火) 05:39:41ID:???フォーム云々ってより集計プログラムの方が問題な気がする。
フォームは集計プログラムの仕様に合わせれば自ずと決まるんじゃないか?それ。
「最終的にどういう形でDBに入ってくれてれば容易に集計できるのか」
という逆算で設計した方がいいよ。
0917nobodyさん
2006/10/24(火) 05:40:31ID:???0919nobodyさん
2006/10/24(火) 05:52:19ID:???どうすればMacなどの機種依存文字を判定できるんでしょうか?
0920nobodyさん
2006/10/24(火) 06:52:43ID:???0921nobodyさん
2006/10/24(火) 07:34:48ID:???↑PHPだけ省かれてるのが、何か意図的なものを感じる。
誰かPHPの記述も追加してくれ!!
0922nobodyさん
2006/10/24(火) 07:56:15ID:???mb_ereg_replace("[\x86\x9F-\x86\xB5]", "", $str); みたいな感じで
文字コードで範囲指定してmb関数で置換すればいいんじゃないの?
0924nobodyさん
2006/10/24(火) 08:01:58ID:???0926nobodyさん
2006/10/24(火) 09:07:05ID:???日のあたらない目立たないとこでコシコシやっていこうぜ。
0927nobodyさん
2006/10/24(火) 09:24:22ID:???0929nobodyさん
2006/10/24(火) 09:40:38ID:???0931nobodyさん
2006/10/24(火) 10:44:10ID:???実際POSTをはじくことはできないにしても業務レベルで使えるようにすることはできる。
2ちゃんのCGIを参考にしたらええよ。
0933nobodyさん
2006/10/24(火) 11:17:10ID:???本人がCSRFという言葉や概念を知っているかどうかは知らないけどな。
で、CSRF防御策については、決定打は無いものの、
世間的に概ねFAが出ている。
0934nobodyさん
2006/10/24(火) 11:41:57ID:???0935nobodyさん
2006/10/24(火) 12:06:41ID:???ttp://www.atmarkit.co.jp/fsecurity/column/ueno/33.html
0937ここ壊れてます
2006/10/24(火) 12:48:35ID:???0940nobodyさん
2006/10/24(火) 13:18:43ID:???0944940
2006/10/24(火) 15:29:24ID:???0946nobodyさん
2006/10/24(火) 16:44:02ID:???ブロックしてたら、ブロックしないようにしてから投稿してねで。
0947nobodyさん
2006/10/24(火) 16:59:53ID:Fh1N1ejS(´д`)つhttp://hoge.com/about/index.html
0949nobodyさん
2006/10/24(火) 17:22:27ID:???PC用と携帯用で振り分ければいい。
万能な記述などない。やるだけだ。
0950nobodyさん
2006/10/24(火) 17:24:14ID:???クッキーが改ざんされてしまうだろうが。
0951nobodyさん
2006/10/24(火) 17:29:51ID:???ただ、ハイジャックされることも頭に入れてコードを書かなくてはならない。
たとえば、下記を参照してもらおう。
セッションA−−−−−−−→セッションB
↑
盗聴
クライアントにセッションAを与える。
クラッカーがセッションAを盗撮。
しかし、セッションAを与えた直後、セッションBに移し変えてセッションAを消してやれば
盗聴されたセッションAは何の意味ももたなくなる。
0953nobodyさん
2006/10/24(火) 17:36:10ID:???・そもそもSSL通せや
が抜けてる
0954nobodyさん
2006/10/24(火) 18:38:11ID:???0957nobodyさん
2006/10/24(火) 20:35:28ID:???aaa.php?test=1とURLに指定して呼び出したときに
echo $HTTP_GET_VARS['test'];をしても1が表示されません。
phpinfo()を呼んだ画面ではregister_globalsがOnと表示されています。
register_globals以外に上記を取得するための設定が必要なのでしょうか?
fedora core5を使っていて、phpのバージョンはphp-5.1.6-1.1です。
0958nobodyさん
2006/10/24(火) 20:38:45ID:???0961nobodyさん
2006/10/24(火) 21:02:38ID:???0963nobodyさん
2006/10/24(火) 21:31:45ID:???0964nobodyさん
2006/10/24(火) 21:36:14ID:???921のリンク先の言葉を使えば、デフォルトのままでforeachが「内部イテレータ」の役割を果たす。
Iteratorはその挙動を自分で指定できる、メタプログラミングの一種かと(既存のarrayを操作できるわけではないけど)。
0965nobodyさん
2006/10/24(火) 21:49:31ID:???そのリンク先、関連項目のforeachをあわせて見てみるべし。
イテレーションとは別のものとして取り上げているしPHPのforeachもそこにある。
本質的な話は別として、そのリンク先では
>配列やそれに類似するデータ構造の各要素に対する繰返し処理の抽象化である。
と解説されている。
>>964
>Iteratorはその挙動を自分で指定できる、メタプログラミングの一種
まさにこれの事ではないのか?
0966nobodyさん
2006/10/24(火) 22:33:27ID:???物凄いスレ違いだけど、おもしろそうなのでつっこんでみる。
「foreachの対象はイテレータではない」
というのが965の主張??
foreachは(おそらく一般的には)イテレーションの構文糖じゃないの?
> 本質的な話は別として、そのリンク先では
> >配列やそれに類似するデータ構造の各要素に対する繰返し処理の抽象化である。
> と解説されている。
これを実現する一つとしてforeachがあるかと。
ちなみにPHPのSPLで用意されているIteratorは、大雑把に言って「foreachの挙動を操作するもの」だと思う。
0967nobodyさん
2006/10/24(火) 23:34:01ID:???0968nobodyさん
2006/10/24(火) 23:56:44ID:???0969nobodyさん
2006/10/25(水) 00:02:50ID:noTSvRA3サイト上の特定のワードを、特定の文字に置き換えることはPHPで簡単にできますか?
例えば、 英文字の DOG というのを すべて日本語の 犬 に置き換えるという具合です。
できるとすればどんな構文になるのでしょうか? お願いします。
0970nobodyさん
2006/10/25(水) 00:11:44ID:???0971nobodyさん
2006/10/25(水) 00:24:22ID:noTSvRA3翻訳できない造語(英語)や日本語のローマ字入力なんかがあるのでブックマークレットは
使えないので残念です。
0972nobodyさん
2006/10/25(水) 00:24:54ID:???0973nobodyさん
2006/10/25(水) 00:33:46ID:???2つ3つの単語を対応する単語に置き換えるならともかく、
まともな翻訳処理を施すなら単語の置換どころの騒ぎではなくなる。
素直に検索サービスに飛ばすブックマークレット使え。
0974nobodyさん
2006/10/25(水) 00:37:00ID:noTSvRA3私の説明が悪かったです^^;
置き換えは英語、日本語関係なく、
サイト内の 「AAA」 という単語を、 単純に「BBB」 と置き換えるだけです。
置き換えたい単語は全部で10個程度です。
宜しくお願いします。
0975nobodyさん
2006/10/25(水) 00:44:18ID:???サーバ上のファイルで一括置換したいという意味であれば適当なテキストエディタ使え。
0978965
2006/10/25(水) 00:47:47ID:???「PHPのforeachが繰り返しの抽象化としてのイテレータなのか」という議論はおいといて、
>>921のリンク先では関連項目のforeachにはPHPのそれが載っているが、
イテレータには載っていない。
この文脈では、PHPのイテレータとしてはIteratorを挙げるのが適当では?
ということ。
話は変わるけどimplements IteratorはJavaやPythonの例のように、
イテレーションのインターフェイス(巻き戻し、次の要素、次があるかの問い合わせ)
を提供するわけで、
・ある集合に繰り返しの窓口を設けるもの。
対してforeachは、
・繰り返しの窓口に対して、順番に要素を取り出すもの。
という事じゃないだろうか?
0979nobodyさん
2006/10/25(水) 00:55:17ID:noTSvRA3どんな関数で置き換えができるのでしょうか?
PHP詳しくないんですみません。ヒント教えていただければ検索してみます。
0980nobodyさん
2006/10/25(水) 00:58:49ID:???マニュアルを最初から読まないことを前提にしてる人にまで回答してられないよ。
というか、その内容ならPHP使わない方がいいんじゃない?
Windows用の置換ツールとか使った方がいいでしょ。
0981nobodyさん
2006/10/25(水) 01:02:55ID:noTSvRA3$hoge = array(
'1'=>'犬',
'2'=>'猫',
'3'=>'フェレット',
);
$line = "1 2 3";
$line2 = strtr($line,$hoge);
こんな感じでやってるんですがなかなか・・・
0982nobodyさん
2006/10/25(水) 01:07:33ID:???0983nobodyさん
2006/10/25(水) 01:13:01ID:???0985nobodyさん
2006/10/25(水) 01:17:54ID:noTSvRA3$hoge=str_replace("dog","犬",$Str);
で、できました!お騒がせしました。
でも、あってますよね^^; 一応ウェブサイト上では置換えできてます
0986nobodyさん
2006/10/25(水) 01:18:26ID:???> この文脈では、PHPのイテレータとしてはIteratorを挙げるのが適当では?
いや、ぶっちゃけforeachだけ載せても、SPLのIteratorまで載せても、大した問題じゃないと思うけど。
perlのとこだってforeachとwhile-eachの例しか載ってないし。
せいぜいIteratorってのもあるよ、ってくらいのコメントで十分かと。
0987nobodyさん
2006/10/25(水) 01:38:21ID:???筆者がたまたまPHPを知らなかっただけの話でしょ。
// 例
class Records implements Iterator {・・・}
$records = new Records();
// 内部イテレータ
foreach ($records as $index => $record) {
処理
}
// 外部イテレータ
for ($records->rewind(); $records->valid(); $records->next()) {
$record = $records->current();
$index = $records->key();
処理
}
0988nobodyさん
2006/10/25(水) 02:03:01ID:???何回計ってもstr_replaceの方が倍以上速い
どう考えてもstrtrのほうが軽そうなのに
0989nobodyさん
2006/10/25(水) 02:10:30ID:???0990nobodyさん
2006/10/25(水) 02:14:28ID:rZkuwLJpさらに一歩進むなら
$hoge=str_replace(array("dog","cat"),array("犬","猫"),$Str);
0992nobodyさん
2006/10/25(水) 02:30:26ID:???(何回も繰り返すと、strtrのほうが速いときも少なくないし)
988のベンチとった実際のコードキボンヌ
0993nobodyさん
2006/10/25(水) 02:45:49ID:???配列じゃない方も対象文字列が長くないとダメね
0994nobodyさん
2006/10/25(水) 07:16:01ID:???strtrは文字列置換ではなく文字置換
strtr("ABC", "XYZ", "A1B1C1");
A=>X, B=>Y, C=>Zに置換されX1Y1Z1になる
0995nobodyさん
2006/10/25(水) 07:22:26ID:???strtr("A1B1C1", "ABC", "XYZ");
phpは似たような関数で引数の順番が違うからいちいちマニュアルで確認しないといけない
0996nobodyさん
2006/10/25(水) 08:00:56ID:???・「ですます調」が中途半端に混ざっててキモイので全て「非ですます調」に統一。
・過去スレを全部リストアップするのは色々な意味で無駄なので5つ程度に制限。
・関連リンクでZFのマニュアルは日本語版があるので修正。
・関連スレは確認が面倒なので削除(どのスレも「php」で検索するだけでヒットするのにリストアップする必要性を感じない)。
・FAQは変なとこで改行されててムカつくので、変な改行を除去。
・printはecho同様に関数ではなく、値を返すだけなので修正(数スレ前に話題に出た)。
0997996
2006/10/25(水) 08:11:19ID:???1000まで残り少ないし。
変だったら、さらにその次のスレから直してください。
0998996
2006/10/25(水) 08:13:52ID:???スマソが誰が任せた。
0999nobodyさん
2006/10/25(水) 08:27:59ID:???1000nobodyさん
2006/10/25(水) 09:13:56ID:???【PHP】下らねぇ質問はここに書き込みやがれ 31
http://pc8.2ch.net/test/read.cgi/php/1161733546/
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。