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

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん2006/10/05(木) 01:38:25ID:y1WWhz/p
PHPに関するくだらねぇ質問用スレです。ここならお前の下らない質問に回答があるかも知れません。

まず読め→【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カテゴリ)の各スレで
・オブジェクト指向については良スレがないから本を買え。理解できないならムリに使うな。
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
0873nobodyさん2006/10/23(月) 22:44:40ID:???
>>872
とりあえず、$fpは何処から持ってきたのか教えてくれ・・・
0874nobodyさん2006/10/23(月) 22:52:36ID:???
>>871
うちは1サーバー1システムだから。
0875名無しさん@お腹いっぱい。2006/10/23(月) 22:53:42ID:1uLUI3dC
すいません。$fpではなく、$fileでした。
こちらに書く際に間違えてしまいました。
改めて、よろしくお願いします。
0876nobodyさん2006/10/23(月) 22:59:40ID:lxved+5w
ユーザー関数内から$textを表示させたいのですが
思うようにうまくいきません。
どなたかご教授お願いいたします。
php4.4.4です。

$text = "2ちゃんねる";

html($text);

function html()
{
echo $text;
}
0877nobodyさん2006/10/23(月) 23:00:18ID:???
>>872
> $str2=str_replace(" ","",$str);
半角スペースしか置換してないように見えるんですが。
0878nobodyさん2006/10/23(月) 23:01:21ID:???
>>876
function html($text)
0879nobodyさん2006/10/23(月) 23:01:32ID:???
>>876
echo $GLOBALS['text'];
08808762006/10/23(月) 23:07:28ID:???
>>878-879
迅速なアドバイスありがとうございます。
両方とも正しく動きました。
『function html()』と『html()』の両方に引数をわたさないとだめだったんですね。

$GLOBALS['text']はとても使いやすいですね。

お互い要所によって使い分けてみたいと思います。
ありがとうございました。
0881名無しさん@お腹いっぱい。2006/10/23(月) 23:07:47ID:1uLUI3dC
>872です。
" "で効果がなかったので、" "としてしまいました。
どちらにしても置換がされないので、どうしたものかと。。。
0882nobodyさん2006/10/23(月) 23:14:30ID:???
>>881
良く考えたらそれはおかしいよ
文字数が減るからfseek0にしたら後ろにゴミが残るでしょ
だから勘違いしてると思う
0883nobodyさん2006/10/23(月) 23:19:43ID:???
<?php ?>をコード中にたくさん記述するのは処理が重くなるのでしょうか?
0884名無しさん@お腹いっぱい。2006/10/23(月) 23:20:42ID:1uLUI3dC
872
fseekを使わないでやるというパターンも試してみたんですけど、どうも
うまくいかないのです。
よろしければ、答えの一例をお示しいただけないでしょうか?
0885nobodyさん2006/10/23(月) 23:32:48ID:???
>>883
1万個くらい書いたHTML文書を生成して試してみてくれ
0886nobodyさん2006/10/23(月) 23:32:58ID:???
>>880
> 『function html()』と『html()』の両方に引数をわたさないとだめだったんですね。
違う。
function html($text) は「引数を受け取れるようにする」という「指定」。
これで初めて引数を使えるようになるものであって、これは引数を渡しているわけじゃない。
渡される引数と、関数側の指定は別のものなので、
$data1 = "1ちゃんねる";
$data2 = "2ちゃんねる";
html($data1);
html($data2);

function html($text)
{
echo $text;
}
のように異なる変数名を使えるし、そこに利点がある。
(関数はそれ以外の部分がどうなっているかを意識せずに作りこむことができる)

> $GLOBALS['text']はとても使いやすいですね。
> お互い要所によって使い分けてみたいと思います。
グローバル変数を使う方式はこういう自由度が無いため、使い分けが重要。
0887nobodyさん2006/10/23(月) 23:33:45ID:???
>>883
たくさんコメントを書きまくるのと同じ程度には重くなると思います。
0888nobodyさん2006/10/23(月) 23:35:05ID:???
>>881
> " "で効果がなかったので、" "としてしまいました。
それ、どっちも半角スペースだと思うんですが。
0889nobodyさん2006/10/23(月) 23:36:26ID:???
>>882
今は置換されてないんだからゴミも出ないよ。文字数変わってないんだもの。
ちなみにtenki.txtの更新日付は実行後に変化してますか?>>872
0890nobodyさん2006/10/23(月) 23:40:36ID:???
>>889
家でテストしたら半角も全角もちゃんと動いたよ
08918712006/10/23(月) 23:40:38ID:???
>>874
そうでしたか。まああまり気にすることなさそうですね。
レスありがとうございました。
0892nobodyさん2006/10/23(月) 23:44:06ID:???
まさか書き込み禁止のデータファイルでエラー制御してるとかだと笑えるけどw
0893nobodyさん2006/10/23(月) 23:46:41ID:zNg8YSYz
すいません、CSVのの特定の行データ(例:18行目)を抽出しるにはどんな
感じにすればよいのでしょうか?
0894名無しさん@お腹いっぱい。2006/10/23(月) 23:46:46ID:1uLUI3dC
872です。
>888
確かに。言い直すと、全角または半角指定でもうまくいきませんでした。
>889
実行後の更新日時は変化していました。
それと、改めて実行したところ、スペースは置換されました。
しかし、"明日天気になぁれ。れ。"
となってしまいました。
きれいに置換する方法はないものでしょうか?
0895nobodyさん2006/10/23(月) 23:53:33ID:???
>>894
結局置換できなかった理由はなんなのよw
ゴミの方は>>882が書いてるけど、上書き時のゴミでしょ。
1度元のファイルを消さないと、同じ桁位置に上書きするわけだから
字数が短くなれば当たり前だが後ろに上書きされなかった内容が残る。
ファイルを作り直すか、中身消去関数を実行しましょう。
0896nobodyさん2006/10/23(月) 23:55:34ID:???
>>893
$fp = fopen("CSVファイル", "r");
for($i = 0, $i < 17; $i ++) fgets($fp);
$line = fgets($fp);

echo $line;
0897nobodyさん2006/10/24(火) 00:16:44ID:???
>>894
とりあえず、動いてるものを動いてないと勘違いしてた時点で
しばらくは質問を控えて自分で悩んだ方がいいと思うよ。
実際の状態が分からない状態で質問されても正直困る。
0898名無しさん@お腹いっぱい。2006/10/24(火) 00:21:07ID:amM1UeJp
結構悩みましたが。。。まぁとりあえず出直します。
0899nobodyさん2006/10/24(火) 00:26:04ID:???
PHPでCharCodeAtみたいな文字コード番号を返す関数ってありますか?
0900nobodyさん2006/10/24(火) 00:35:04ID:Ylboj5c4
>>896
ありがとうございます。確かに18行目のデータ全て抽出することができました。
さて、これからがぼくにとっての難問なんです・・・

たとえば、2つのCSVファイルがあるのですが(佐賀県.CSVと汚職.CSV)、やりたいことは
汚職.CSVの中の「Sさん」という人物プロフィール紹介のページで、「Sさん」に当てはまる(登録されている)
汚職カテゴリーを佐賀県.CSVの中からすべて抽出し、<li>・・・・・</li>の形で表示したいのですが、
なかなかうまくいきません。

どうかお知恵をおかしください。どんな感じにすればよいのでしょうか?


0901nobodyさん2006/10/24(火) 00:58:03ID:???
@頑張る
A単純化して考えてみる
BDB使う
0902nobodyさん2006/10/24(火) 01:00:27ID:???
>>899
ord
0903nobodyさん2006/10/24(火) 01:18:03ID:???
>>900
18行目の抽出程度で困る人ではその内容は無理かと。
0904nobodyさん2006/10/24(火) 03:52:46ID:???
>>900
佐賀県.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:+34GEzTN
自宅内PCのlocalhostからhoge.comへポストで送信することについて。
hoge.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:???
>>909
REFERERを見て自分のサイト以外だったら弾くとかくらいじゃ…
もっとも、昨今はREFERERを返さない設定にしちゃってる
ブラウザやセキュリティソフトが多いのであまり十分とは言えないけど。
あとはセッションを使って、直前の送信ページ表示の情報を持ってる
ユーザのPOST以外は受信不可にするとか。
もっともこれも1度送信ページを表示してから実行されるとスルーしちゃうけど。

それを完璧に防ぐ方法は理論上存在しないと思う。
しょせん、クライアントのブラウザを介しての処理だからねぇ。
クライアントが「送信元のページ」を正確に渡してくれないことには不可能で、
クライアント自体をユーザが自作可能である以上、そんな手法は存在しない。
0911nobodyさん2006/10/24(火) 05:12:21ID:???
Refererより改竄しやすいけどCookieのセッションがあるな。
有効期限で一定時間以後は無効にもできるし。
0912nobodyさん2006/10/24(火) 05:16:19ID:???
セッション使った対処方法もすでに>>910で書いてるけど…
データ本体をサーバ側に置いとけば改竄はそうそうできないよ。
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:???
アンケートフォームなどで、radioボタンなどのvalueとして設定される数値と
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:???
>>914
フォーム云々ってより集計プログラムの方が問題な気がする。
フォームは集計プログラムの仕様に合わせれば自ずと決まるんじゃないか?それ。
「最終的にどういう形でDBに入ってくれてれば容易に集計できるのか」
という逆算で設計した方がいいよ。
0917nobodyさん2006/10/24(火) 05:40:31ID:???
IPではじけないのか?
0918nobodyさん2006/10/24(火) 05:41:40ID:???
>>917
クライアントのIPと送信元ページに何の関係があるのよ。
0919nobodyさん2006/10/24(火) 05:52:19ID:???
Macのハートマークなどの機種依存文字を省きたいんですが、ordでは成功しませんでした。
どうすればMacなどの機種依存文字を判定できるんでしょうか?
0920nobodyさん2006/10/24(火) 06:52:43ID:???
bin2hex()でゴニョゴニョするのかな?ごめんわからん。
0921nobodyさん2006/10/24(火) 07:34:48ID:???
http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF

↑PHPだけ省かれてるのが、何か意図的なものを感じる。
誰かPHPの記述も追加してくれ!!
0922nobodyさん2006/10/24(火) 07:56:15ID:???
>>919
mb_ereg_replace("[\x86\x9F-\x86\xB5]", "", $str); みたいな感じで
文字コードで範囲指定してmb関数で置換すればいいんじゃないの?
0923nobodyさん2006/10/24(火) 08:00:23ID:???
>>921

foreach ($ary as $i) {
 print_r($i);
}
0924nobodyさん2006/10/24(火) 08:01:58ID:???
Perlとほとんど変わらんがな。
0925nobodyさん2006/10/24(火) 08:47:27ID:???
>>923
それならprint_r($ary)でいいじゃん
0926nobodyさん2006/10/24(火) 09:07:05ID:???
Web特化はお呼び出ないってことですよ。
日のあたらない目立たないとこでコシコシやっていこうぜ。
0927nobodyさん2006/10/24(火) 09:24:22ID:???
rubyとかpythonとかどこで使われてんの?
0928nobodyさん2006/10/24(火) 09:27:50ID:???
>>925
いや、イテレータの説明ですよ?
>>927
どこっつーか普通にスクリプトとして。
0929nobodyさん2006/10/24(火) 09:40:38ID:???
「いれてーな」に脳内変換してしまう自分は病気でしょうか。
0930nobodyさん2006/10/24(火) 10:12:29ID:???
>>928
この場合のイテレータはPHPでいうとimplements Iteratorなクラスでは?
0931nobodyさん2006/10/24(火) 10:44:10ID:???
>>910
実際POSTをはじくことはできないにしても業務レベルで使えるようにすることはできる。
2ちゃんのCGIを参考にしたらええよ。
0932nobodyさん2006/10/24(火) 10:49:18ID:???
>>931
質問者は「POSTを弾く方法」を聞いてるんじゃないのか?
0933nobodyさん2006/10/24(火) 11:17:10ID:???
>>909の質問は、どう見てもCSRFを防ぐ方法について。
本人がCSRFという言葉や概念を知っているかどうかは知らないけどな。

で、CSRF防御策については、決定打は無いものの、
世間的に概ねFAが出ている。
0934nobodyさん2006/10/24(火) 11:41:57ID:???
大手では画像に数字をだして、それを入力させてsubmitさせてるよ。
0935nobodyさん2006/10/24(火) 12:06:41ID:???
有名な件ですが
ttp://www.atmarkit.co.jp/fsecurity/column/ueno/33.html
0936nobodyさん2006/10/24(火) 12:12:08ID:???
>>934
別に、大手でなくても・・・
0937ここ壊れてます2006/10/24(火) 12:48:35ID:???
0938nobodyさん2006/10/24(火) 12:53:36ID:???
>>909ってhoge.com側の対策じゃなくて自宅側の対策について聞いてるような?
0939nobodyさん2006/10/24(火) 13:01:22ID:???
>>909
だからhoge.comは実在する企業のドメインだからexample.comを使えと何度言えばわk
0940nobodyさん2006/10/24(火) 13:18:43ID:???
おまえらほんとセキュリティにはうぶなんだな(笑)
0941nobodyさん2006/10/24(火) 13:51:15ID:???
>>940
ぜひここでセキュリティ対策の講義を(笑)
0942nobodyさん2006/10/24(火) 14:16:18ID:???
>>940
初心者でもわかりやすくお願いしますね(笑)
0943nobodyさん2006/10/24(火) 14:22:00ID:???
>>940の次の一言で歴史は動く。
09449402006/10/24(火) 15:29:24ID:???
ネットに繋がなければいいんだよ。
0945nobodyさん2006/10/24(火) 16:33:41ID:???
>>944
お前にはがっかりだ。
0946nobodyさん2006/10/24(火) 16:44:02ID:???
単純な話、cookieでいいじゃん。
ブロックしてたら、ブロックしないようにしてから投稿してねで。
0947nobodyさん2006/10/24(火) 16:59:53ID:Fh1N1ejS
ホゲドットコム
(´д`)つhttp://hoge.com/about/index.html
0948nobodyさん2006/10/24(火) 17:20:24ID:???
>>944
騙ってんじゃねえよ。
いいか、phpでもっとも有効な対策は重要なデータはhiddenにのせないことだ。
0949nobodyさん2006/10/24(火) 17:22:27ID:???
cookieが使えるのはPCのみで、携帯ではcookie対応機のみ。
PC用と携帯用で振り分ければいい。
万能な記述などない。やるだけだ。
0950nobodyさん2006/10/24(火) 17:24:14ID:???
あと、クッキーに「サーバのログに書き込むデータ」は保存しないことだ。
クッキーが改ざんされてしまうだろうが。
0951nobodyさん2006/10/24(火) 17:29:51ID:???
やはりセッションが無難であるといえる。
ただ、ハイジャックされることも頭に入れてコードを書かなくてはならない。
たとえば、下記を参照してもらおう。

セッションA−−−−−−−→セッションB
         ↑
         盗聴

クライアントにセッションAを与える。
クラッカーがセッションAを盗撮。
しかし、セッションAを与えた直後、セッションBに移し変えてセッションAを消してやれば
盗聴されたセッションAは何の意味ももたなくなる。
09529402006/10/24(火) 17:30:29ID:???
>>948->>951はおれ

ツッコミどうぞ
0953nobodyさん2006/10/24(火) 17:36:10ID:???
・セッションはIPと対にして発行、IPが変わったら無効
・そもそもSSL通せや
が抜けてる
0954nobodyさん2006/10/24(火) 18:38:11ID:???
スレ違いだけど、PHP使い始めて2年、プログラマになって20日だけど、今日初めてinclude_onceの有り難みが解ったorz
0955nobodyさん2006/10/24(火) 18:42:39ID:???
>>951
>盗撮

ふだん使ってる言葉が無意識に出ちゃってるぞ。
0956nobodyさん2006/10/24(火) 19:04:53ID:???
>>953
ipだけじゃだめでしょ。
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:???
ttp://jp.php.net/manual/ja/ini.core.php#ini.register-long-arrays
0959nobodyさん2006/10/24(火) 20:42:36ID:???
>>957
そんなもん使うな。

$_GET, $_POSTなどのスーパーグローバル変数を使え。
0960nobodyさん2006/10/24(火) 20:44:31ID:???
>>958
ありがとうございます。
1ピコ秒で解決しました。
0961nobodyさん2006/10/24(火) 21:02:38ID:???
ぼくのぴこ
0962nobodyさん2006/10/24(火) 21:30:09ID:???
>>956
ほかになにがあるんですか?いってください。
0963nobodyさん2006/10/24(火) 21:31:45ID:???
別の人だけどproxyも全部はじかないとな
0964nobodyさん2006/10/24(火) 21:36:14ID:???
>>930
921のリンク先の言葉を使えば、デフォルトのままでforeachが「内部イテレータ」の役割を果たす。
Iteratorはその挙動を自分で指定できる、メタプログラミングの一種かと(既存のarrayを操作できるわけではないけど)。
0965nobodyさん2006/10/24(火) 21:49:31ID:???
>>964
そのリンク先、関連項目のforeachをあわせて見てみるべし。
イテレーションとは別のものとして取り上げているしPHPのforeachもそこにある。

本質的な話は別として、そのリンク先では
>配列やそれに類似するデータ構造の各要素に対する繰返し処理の抽象化である。
と解説されている。

>>964
>Iteratorはその挙動を自分で指定できる、メタプログラミングの一種
まさにこれの事ではないのか?
0966nobodyさん2006/10/24(火) 22:33:27ID:???
>>965
物凄いスレ違いだけど、おもしろそうなのでつっこんでみる。
「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
>>970
翻訳できない造語(英語)や日本語のローマ字入力なんかがあるのでブックマークレットは
使えないので残念です。
0972nobodyさん2006/10/25(水) 00:24:54ID:???
IEならjavascriptをアドレスバーに直接ぶちこめばできるよ
レス数が950を超えています。1000を超えると書き込みができなくなります。