【PHP】下らねぇ質問はここに書き込みやがれ 30
レス数が950を超えています。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カテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0880876
2006/10/23(月) 23:07:28ID:???迅速なアドバイスありがとうございます。
両方とも正しく動きました。
『function html()』と『html()』の両方に引数をわたさないとだめだったんですね。
$GLOBALS['text']はとても使いやすいですね。
お互い要所によって使い分けてみたいと思います。
ありがとうございました。
0881名無しさん@お腹いっぱい。
2006/10/23(月) 23:07:47ID:1uLUI3dC" "で効果がなかったので、" "としてしまいました。
どちらにしても置換がされないので、どうしたものかと。。。
0882nobodyさん
2006/10/23(月) 23:14:30ID:???良く考えたらそれはおかしいよ
文字数が減るからfseek0にしたら後ろにゴミが残るでしょ
だから勘違いしてると思う
0883nobodyさん
2006/10/23(月) 23:19:43ID:???0884名無しさん@お腹いっぱい。
2006/10/23(月) 23:20:42ID:1uLUI3dCfseekを使わないでやるというパターンも試してみたんですけど、どうも
うまくいかないのです。
よろしければ、答えの一例をお示しいただけないでしょうか?
0886nobodyさん
2006/10/23(月) 23:32:58ID:???> 『function html()』と『html()』の両方に引数をわたさないとだめだったんですね。
違う。
function html($text) は「引数を受け取れるようにする」という「指定」。
これで初めて引数を使えるようになるものであって、これは引数を渡しているわけじゃない。
渡される引数と、関数側の指定は別のものなので、
$data1 = "1ちゃんねる";
$data2 = "2ちゃんねる";
html($data1);
html($data2);
function html($text)
{
echo $text;
}
のように異なる変数名を使えるし、そこに利点がある。
(関数はそれ以外の部分がどうなっているかを意識せずに作りこむことができる)
> $GLOBALS['text']はとても使いやすいですね。
> お互い要所によって使い分けてみたいと思います。
グローバル変数を使う方式はこういう自由度が無いため、使い分けが重要。
0889nobodyさん
2006/10/23(月) 23:36:26ID:???今は置換されてないんだからゴミも出ないよ。文字数変わってないんだもの。
ちなみにtenki.txtの更新日付は実行後に変化してますか?>>872
0892nobodyさん
2006/10/23(月) 23:44:06ID:???0893nobodyさん
2006/10/23(月) 23:46:41ID:zNg8YSYz感じにすればよいのでしょうか?
0894名無しさん@お腹いっぱい。
2006/10/23(月) 23:46:46ID:1uLUI3dC>888
確かに。言い直すと、全角または半角指定でもうまくいきませんでした。
>889
実行後の更新日時は変化していました。
それと、改めて実行したところ、スペースは置換されました。
しかし、"明日天気になぁれ。れ。"
となってしまいました。
きれいに置換する方法はないものでしょうか?
0895nobodyさん
2006/10/23(月) 23:53:33ID:???結局置換できなかった理由はなんなのよw
ゴミの方は>>882が書いてるけど、上書き時のゴミでしょ。
1度元のファイルを消さないと、同じ桁位置に上書きするわけだから
字数が短くなれば当たり前だが後ろに上書きされなかった内容が残る。
ファイルを作り直すか、中身消去関数を実行しましょう。
0896nobodyさん
2006/10/23(月) 23:55:34ID:???$fp = fopen("CSVファイル", "r");
for($i = 0, $i < 17; $i ++) fgets($fp);
$line = fgets($fp);
echo $line;
0897nobodyさん
2006/10/24(火) 00:16:44ID:???とりあえず、動いてるものを動いてないと勘違いしてた時点で
しばらくは質問を控えて自分で悩んだ方がいいと思うよ。
実際の状態が分からない状態で質問されても正直困る。
0898名無しさん@お腹いっぱい。
2006/10/24(火) 00:21:07ID:amM1UeJp0899nobodyさん
2006/10/24(火) 00:26:04ID:???0900nobodyさん
2006/10/24(火) 00:35:04ID:Ylboj5c4ありがとうございます。確かに18行目のデータ全て抽出することができました。
さて、これからがぼくにとっての難問なんです・・・
たとえば、2つのCSVファイルがあるのですが(佐賀県.CSVと汚職.CSV)、やりたいことは
汚職.CSVの中の「Sさん」という人物プロフィール紹介のページで、「Sさん」に当てはまる(登録されている)
汚職カテゴリーを佐賀県.CSVの中からすべて抽出し、<li>・・・・・</li>の形で表示したいのですが、
なかなかうまくいきません。
どうかお知恵をおかしください。どんな感じにすればよいのでしょうか?
0901nobodyさん
2006/10/24(火) 00:58:03ID:???A単純化して考えてみる
BDB使う
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詳しくないんですみません。ヒント教えていただければ検索してみます。
レス数が950を超えています。1000を超えると書き込みができなくなります。