【PHP】下らねぇ質問はID出して書き込みやがれ 82
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/03/09(月) 02:14:28ID:HyrthkeE過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 81
http://pc11.2ch.net/test/read.cgi/php/1234958956/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
0261nobodyさん
2009/03/15(日) 20:19:50ID:???0262nobodyさん
2009/03/15(日) 20:25:12ID:???if ($i >= 0 && $i <= 100) {
echo "iは0〜100";
} else {
echo "iは不明";
}
でいいのでは?
0264nobodyさん
2009/03/15(日) 20:33:50ID:???switchでcaseが大量になる場合は配列をうまく利用することをおすすめする
function func1() {
}
・
・
・
$case = array(func1(),func2(),func3(),・・・・・func999),
$case[0];
0267261
2009/03/15(日) 22:54:26ID:???せめて
$case = array('func1', 'func2', 'func3');
call_user_func($case[0]); // $case[0]();でも多分動く
にしとけ。
とりあえずそのコードは実行効率、可読性、保守性などあらゆる観点で最低だ。
後者2つについてはこのコードも大差ないが。
0268nobodyさん
2009/03/16(月) 01:35:07ID:???改行いっぱい使って、
$hoge = "hoge1"
. "hoge2"
. "hoge3"
;
こうしたのと、単に
$hoge="hoge1hoge2hoge3";
ってしたのとでは、
上のような改行いっぱい使った場合のが
積み重なってくると、改行使ってないものよりも
読み込みが遅くなる?
改行やスペースは無視になるとはきくけどなんか不安なのです。
0269nobodyさん
2009/03/16(月) 02:37:08ID:???文字列の結合の分遅くなるな、理論上は。
改行も、確かに理屈の上では遅くなる。人間に知覚できる差じゃないけどな。
仮に10000行空行があったとしても、目に見える応答速度差は出ない。
1MB分改行があっても気づかないと思う。
つうか、お前は、ペーパー代を惜しんでウンコした後ケツを拭かなかったりするのか?
ゴミみたいな高速化と可読性を天秤にかけるなら、どう考えても可読性を優先すべきだ。
0270nobodyさん
2009/03/16(月) 06:04:33ID:???結合された文字列になるんだっけか。
スクリプト言語で拘ってもしょうがないとは思うが、気分的にはやってほしいところではあるな。
APCとかのキャッシュ環境なら差がでるかも知れんし。
0271nobodyさん
2009/03/16(月) 11:58:48ID:???(1)さーって、、、まんず、helloって出すわけだから、
print "hello";
だろ、、、これはまず100%確実、、、
(2)そんで、クラスの宣言せんといかんな、、、
class {
}
、、、っと、、、
あ、、、クラス名、考えないといかんな、、、
はじめてのだから、firstでいいか?
class first {
}
0272nobodyさん
2009/03/16(月) 12:00:24ID:???そんで、さっきの
print "hello";
を、メソッドの中に入れないといかんのだよな、、、
あ!メソッド名も考えないといかんのだよな、、、
helloを出すメソッドだから、helloでいいか?
function hello(){
print "hello";
}
0273nobodyさん
2009/03/16(月) 12:01:11ID:???よしよし、、、作業は順調だな、、、
これで、このメソッドを、さっき作った
クラスの中に、放り込めばいいのだよな、、、
class first{
function hello(){
print "hello";
}
}
0274nobodyさん
2009/03/16(月) 12:02:05ID:???これでクラスは完成、、っと、、、
次は、このクラスをnewして、
オブジェクトに代入せなあかんのだよな、、、
$obj=new first();
0275nobodyさん
2009/03/16(月) 12:03:00ID:???よしよし、、、
これでインスタンスができたから、
このインスタンスから、->で、クラス内の
メソッドにアクセスすればええんだよな、、、
print $obj->hello();
0277nobodyさん
2009/03/16(月) 12:05:51ID:???<?php
class first{
function hello(){
print "hello";
}
}
$obj=new first();
print $obj->hello();
?>
完成、、、と、、、。
カンタンに説明すると、
firstというクラスを定義しhello()というメソッドを定義し
そのメソッドの中でhelloを出力する命令を書きnewでfirstクラスの
インスタンスを作成しオブジェクト変数に代入しそのできてきた
インスタンスからhello()メソッドにアクセスして最終的にhelloを
画面に出すことに成功しました。
0279nobodyさん
2009/03/16(月) 12:08:53ID:???<?php
print "hello";
?>
0282nobodyさん
2009/03/16(月) 12:21:35ID:???0283nobodyさん
2009/03/16(月) 12:25:30ID:???0284nobodyさん
2009/03/16(月) 12:29:26ID:???ものの考え方・概念のことだから本質的にはそうだね
ただOOPの核となる継承やらカプセル化をする為にはクラスを使わないといけない
helloを出力するだけにわざわざクラス使うのはPHPではただの冗長
0285nobodyさん
2009/03/16(月) 13:00:26ID:???OOP勉強してる人いないの?
0286nobodyさん
2009/03/16(月) 13:10:52ID:???一応、スレはある。
が、もう死にかけの体。
PHPでOOP
ttp://pc11.2ch.net/test/read.cgi/php/1172205352/l50
0287nobodyさん
2009/03/16(月) 13:11:01ID:???おお、さすが最強PHPw。
ハーディ・ラマヌジャン数を出力するプログラムは、
Cで書いても、実行に数十秒かかる。
perlやpythonに至っては数分以上かかる。
だが、PHPなら、一瞬。むしろ、計算する必要すらない。
<?php
echo "1729";
?>
もちろん、パクリネタだ。
0288nobodyさん
2009/03/16(月) 13:25:45ID:???本気で勉強したいならJavaでやったほうがいいって散々言われてるだろ
オブジェクト指向という考え方を理解するためだけなら
わざわざPHPでやる必要はない
OOPに関するドキュメントの多いJavaでやったほうがいい
PHPでOOPなんてJavaやC#なんかをやってるやつの為にあると思っていい
0289nobodyさん
2009/03/16(月) 15:26:16ID:zNDXWAna($a < $b) ? $key = $a : $key = $b;
これの意味がちょっとわからないのですがif文で表すことってできますか?
0290nobodyさん
2009/03/16(月) 15:33:02ID:???$key = $a;
} else {
$key = $b;
}
0291nobodyさん
2009/03/16(月) 15:33:12ID:???普通はこう書く
if ($a < $b) $key= $a;
else $key= $b;
0292nobodyさん
2009/03/16(月) 15:52:09ID:zNDXWAnaなるほど!ありがとうございます。
ちなみに>>289の書き方とif使った書き方、どっちがいいとかあるのですか?
0293nobodyさん
2009/03/16(月) 15:59:13ID:???上記のような簡単なif文なら三項演算子でもいいと思うけど、複雑なものになると
可読性が落ちるので、その場合は素直にif文で済ませた方がよい
0294nobodyさん
2009/03/16(月) 16:01:19ID:???三項演算子は変数に入れることができる
なので結果を変数に入れたいときとかは便利だが
条件文をかくためだけに使うなら可読性を重視して
普通のif-else文を使ったほうがいい
三項演算子なんてなくてもコーディングできるので
他の人と共同開発なんかの場合は使わないほうがいい
0296nobodyさん
2009/03/16(月) 16:46:33ID:TMtB/4swメジャーな方法だとcaptchaを入れるんでしょうが、他に方法あったら教えてください。
たとえば、スパム業者(国内・国外問わず)のIPリストなんかはないんでしょうか?
よろしくお願いします
0298nobodyさん
2009/03/16(月) 17:14:59ID:???基本的な対策として
本文中のhttp://文字列を禁止する
もしくは出てくる回数を制限する
(最近はttp://からはじめたりドメインからはじめたりするスパムもある)
文字がどういうもので構成されてるかを見る
日本語[あ-ん]が必ず入っていないと駄目とか
[\x00-\x7f]のみの文字列だったら駄目とか
(最近は文章の最後のほうに日本語を適当に入れてくるスパムもある)
スパムをあえて投稿させてパターンを分析し
自分でリストを作成する(IPなり禁止文字列なり)
(IPはできればサーバ側ではじく)
このほかによく見る方法としては
ひらがなに対応するカタカナを入力してもらうとか
(captchaはすでに効果がないので代替手段を)
他の閲覧者にスパムかどうかを判定してもらってJavaScriptで非表示にする
(youtubeなんかで見るパターン)
とかかな
いずれも限界があるので閲覧者に被害が出ないようにだけ配慮すればいいんじゃない?
そういう観点では誤クリ防止にhttp://のオートリンクをしないとかが一番効果的
0299nobodyさん
2009/03/16(月) 17:19:04ID:???0301nobodyさん
2009/03/16(月) 17:28:15ID:???はい いいえ
↑これを入力させればいい
0303nobodyさん
2009/03/16(月) 17:55:37ID:???0304nobodyさん
2009/03/16(月) 18:04:29ID:GOOX8xiJMVCを考えた、フレームワークのような形になるのですが、
やっぱり皆さんもそうですか?それとも最初からフレームワーク使いますか?
0306nobodyさん
2009/03/16(月) 18:10:14ID:???しか対処できないんじゃないか?
ライブラリも多いし、作るのも難しくないだろ。
0308nobodyさん
2009/03/16(月) 18:49:09ID:???register_globalsをonにするとセキュリティ上よくなく
また、PHP6からはonにすることができなくなると聞きました
そこで質問なのですが、ハイパーリンクにごとにページの内容を変えたり
処理の内容を変えたりしたい場合は他にどのような方法があるのでしょうか
質問とは関係ないのですがスパム対策で 1 + 2 = [ ] といのを見たことがありますね
(数値は画像でランダムでした
0309nobodyさん
2009/03/16(月) 19:11:39ID:???基本的には POST あるいは GET メソッドでクエリを渡して、その値に応じて処理を分ける。
ハイパーリンクでなら GET 。
0310nobodyさん
2009/03/16(月) 19:21:10ID:TMtB/4swたくさんの意見ありがとうございます
カタカナをひらがなにっていうのはいいですね!
キャプチャの文字列をカタカナにするってのは無理なんでしょうか?
0311nobodyさん
2009/03/16(月) 19:25:46ID:???質問をランダムに生成できればいいんだが
質問と答えがあらかじめ決まってるようなものだとそのうち解析されるし
画像のひらがなをみてカタカナにしろぐらいだとCaptcha解析技術応用すれば
解析したひらがなに対応するカタカナに置き換えればできちゃうし
完全な対策なんてないからどこかで妥協するしかない
いろんなことやった上でなんとかして投稿してやろうなんて考える
海外のスパマーなんてそうはいないよ
仮にいろんな対策をした上で変なのが投稿されたらそれは日本人の愉快犯だ
というわけでそんな神経とがらせてスパマー対策しなくてもいいんじゃないだろうか
0312nobodyさん
2009/03/16(月) 19:32:15ID:???できますよ
そういうライブラリは探せばあるんじゃないかな?
単に文字を画像に出力するだけなら簡単なんですけどね
画像をゆがめたりする処理が難しいんじゃないかな
0313nobodyさん
2009/03/16(月) 21:48:57ID:???0314nobodyさん
2009/03/16(月) 21:50:47ID:???(1)書き込みをしようとしてきたら、クッキーを
受け入れてるかどうかを確認する。クッキーないやつは
書き込みできない
(2)書き込みしてきようとしたサーバーに簡易ポートスキャンをかけ、
オープンプロキシでないことを確認する。もしオープンプロキシだったら拒否
(3)
プロキシからの書き込みについては、手動で
リストを作成して、そのリストにIPが載っていたら、拒否。
こんな感じ。一部だけど。
0315nobodyさん
2009/03/16(月) 23:05:32ID:l8gT672Pログインしないと見れないページを作ったんだが、
画像はどうやって守ればいいんだ?
0316nobodyさん
2009/03/16(月) 23:07:02ID:???DNSBL(DNSブラックリスト)でぐぐれ
スパムちゃんぷるーが手軽
0318nobodyさん
2009/03/16(月) 23:35:54ID:l8gT672PPHPで画像を送出するってことかな?
ぐぐったけど具体的なコードがわからない
0319nobodyさん
2009/03/16(月) 23:51:20ID:???ヘッダ送信
readfile()で出力
0320nobodyさん
2009/03/16(月) 23:53:20ID:???0321nobodyさん
2009/03/17(火) 00:28:16ID:PIugUbr/$res = mysql_query($sql);
$row = mysql_fetch_array($res);
echo $row["name"];
こうしたらMySQLから1行取得出来ますが、もっと簡略化する方法は無いでしょうか?
特に、結果が1行・1フィールドだと分かっている場合、
mysql_fetch_arrayをして一旦配列に入れるのは不効率な気がしています。
0322nobodyさん
2009/03/17(火) 00:35:15ID:???0323nobodyさん
2009/03/17(火) 00:38:22ID:???SELECT name FROM address LIMIT 1
配列に代入云々は数マイクロ秒とかのゴミみたいな差しかつかない。
こいつは測定可能なレベルで実行性能に影響する。
0324321
2009/03/17(火) 01:11:49ID:???>>321のようなテーブルにアクセスして、指定値を取得する関数を
作っているのですが、 321のソースでフィールド「name」が異なる場合、
echo $row["name2"];
というように名称を指定して出力しなければいけません。
まぁ、関数を
function dbSelect($fld_name){
echo $row[$fld_name];
}
とすれば良いだけの気がしますが、
何か良い関数があるのかと思い、質問しました。
0325nobodyさん
2009/03/17(火) 02:58:59ID:???応援よろしくお願いします
0326nobodyさん
2009/03/17(火) 03:15:35ID:???0327nobodyさん
2009/03/17(火) 07:54:44ID:???PDOが使用可能であれば…
http://jp.php.net/manual/ja/pdostatement.fetchcolumn.php
0328nobodyさん
2009/03/17(火) 08:04:24ID:???ネックなのは一度もCMSを使ったことがないことだ・・
0329nobodyさん
2009/03/17(火) 09:18:29ID:???0330nobodyさん
2009/03/17(火) 10:44:32ID:Ib1RB6YLデータベースなどに以下のようなデータがあるとします。
id,word
1,日本
2,日本海
3,日本海溝
4,太平洋
これらを辞書として、
・日本海溝は太平洋側にあります。
という文章に最長で一致するものからリンクを張っていくのですが、
<a href="word/3"><a href="word/2"><a href="word/1">日本</a>海</a>溝</a>は<a href="word/4">太平洋</a>側にあります。
のように、重複してリンクが張られてしまいます。
すでにリンクが張られている言葉の内側にはリンクを張らないようにしたいのですが、
どのような対処法が考えられますでしょうか?
PHPで処理する場合の対処法を教えてください。
0331nobodyさん
2009/03/17(火) 11:14:15ID:???0332nobodyさん
2009/03/17(火) 11:32:03ID:???array(
'id' => 1,
'term' => '日本'
)
);
辞書がこんなかんじの配列にあって、
foreach ($words as $word) {
str_replace($word['term'], '<a href="word/' . $word['id'] . '">' . $word['term'] . '</a>', $body);
}
辞書は単語の文字数の長い順にソートさせてあります。
実際のコードとは違うのでどこか変かもしれませんが、流れはこんな感じです。
単純に、辞書の配列をforeachさせて、
str_replaceでアンカータグをつけたものに置き換えているだけです。
なので、重複して置き換えられてしまうのは当然なのですが、
対処法が思い浮かばなくて;
よろしくお願いします。
0333nobodyさん
2009/03/17(火) 11:33:23ID:???×
str_replace($word['term'], '<a href="word/' . $word['id'] . '">' . $word['term'] . '</a>', $body);
○
$body = str_replace($word['term'], '<a href="word/' . $word['id'] . '">' . $word['term'] . '</a>', $body);
0335nobodyさん
2009/03/17(火) 11:45:00ID:PBdJ+iXh【OS名】Windows XP
【PHPのバージョン】php4.4.4
【質問内容】
『−』を含んだ文字列を preg_match で検索するとエラーが発生するのでキーワードを preg_quote で処理すると
『ホームページ』が『ホ―[ムペ―[ジ』となってしまいます。
お知恵を貸して下さい。お願いします。
0336nobodyさん
2009/03/17(火) 11:48:44ID:Vq5xUXrnmb_internal_encoding('utf8');
mb_regex_encoding('utf8');
0337nobodyさん
2009/03/17(火) 11:49:06ID:qY/TJCjNそのエラーを表示しない方法はphp.iniで指定するってのは分かった。
これでエラーは出なくなったわけだが、画像はやっぱり出ない。
どうやらいつも同じファイルを処理した時にエラーになるので
画像ファイル側の問題だと思うけど
これをうまく処理する事はできるの?
そもそも何でこんなエラーがでるの?
知ってる人 教えてYO!
0338nobodyさん
2009/03/17(火) 11:53:27ID:???0340nobodyさん
2009/03/17(火) 13:22:05ID:PBdJ+iXh有難う御座います。
mb_regex_encodingでUTF-8にしてもやはりホ―[ムペ―[ジとなってしまいます。
>>339さん。
まだ勉強中の為に5への以降は難しいです…
0341nobodyさん
2009/03/17(火) 13:33:39ID:???0342nobodyさん
2009/03/17(火) 14:22:48ID:???0343nobodyさん
2009/03/17(火) 14:23:55ID:???0344nobodyさん
2009/03/17(火) 15:16:01ID:???0345nobodyさん
2009/03/17(火) 15:52:24ID:s4aiV5Akこのサイト(みんなのキャンパス:http://campus.nikki.ne.jp/)
のように掲示板の情報を一部だけ閲覧することができ、
登録・ログイン後に情報をある程度投稿すると全ての情報が閲覧できるような
会員制サイトを作成したいと思っています。
WordPressやOpenPNEで色々試したのですがいまいちうまくいきません。
こういうものは、どうやったら実現できるのでしょうか?
よろしくお願いします。
0346nobodyさん
2009/03/17(火) 15:55:22ID:???一部表示処理
} else {
全表示処理
}
0347nobodyさん
2009/03/17(火) 16:03:10ID:???とりあえず Wordpress の方なら is_user_logged_in() でログインしてるかどうか調べられるよ
0349nobodyさん
2009/03/17(火) 16:56:04ID:???各プラグインは自作しなければいけないからな。
俺も自作システムを作る時にWordpressやらOpenPNEやらを見たけど、
やっぱり「目的の仕様に合った作り方」をしているので、
それらを改造してオリジナルのシステムを作るのは無理があるよ。
0350345
2009/03/17(火) 17:04:11ID:s4aiV5Ak質問の仕方が悪くて申し訳ありません。
みんなのキャンパス:http://campus.nikki.ne.jp/
というサイトは登録後ログインしても、
大学の講義情報を3件書き込まないと全ての情報を見ることができません。
このように書き込まないと掲示板の他のページが見れない、といったように
するにはどういった処理が必要なのでしょうか?
よろしくお願いします。
0351335
2009/03/17(火) 17:08:29ID:PBdJ+iXhお陰で解決致しました。有難う御座います。
出来るだけ早く5に以降するよう努力致しますf^^;
有難う御座いました!
0352nobodyさん
2009/03/17(火) 17:13:30ID:???そこがどんな風な実装をしてるかは知らないけど。
ユーザー情報に「書き込んだ回数」を記録する。
一緒に「全ての情報を見れる権限」もフラグとしてDBに記録しておいて、書き込み回数が3回を越えた時点で true にする。
で、ページを表示するときにその権限を持ってるか持ってないかを判断する。
0353nobodyさん
2009/03/17(火) 17:17:13ID:???0355330
2009/03/17(火) 17:37:21ID:Ib1RB6YL0356nobodyさん
2009/03/17(火) 17:44:56ID:???自分がどうやってるか書いてないよな。推測すると、再帰でpreg_matchでもやってんのか?
まぁ、それはいいや。
単語リストをベースにトークナイザーにかけて処理するのがいいと思うよ。
0357345
2009/03/17(火) 18:00:29ID:s4aiV5Ak>>353さん、回答下ったみなさん、有難うございました!
2ちゃんねるはじめてだったのですが回答いただけてうれしかったです。
なんとなく方向がわかったので色々やってみます。
0358330
2009/03/17(火) 18:07:06ID:Ib1RB6YLすみません;
>>332 に書いたのですが、IDを出し忘れてしまって・・・
恥ずかしながら、トークナイザーというのをはじめて聞いたのですが、
どういったものなのでしょうか?
PHPには、その機能は備わっているのでしょうか?
0359nobodyさん
2009/03/17(火) 19:00:40ID:???0360nobodyさん
2009/03/17(火) 19:31:59ID:???アルゴリズムの問題だと思うけど、マッチングした文字列をいったん置き直して、展開しなすとかしたら?
日本海溝は太平洋側にあります。
<3>は太平洋側にあります。
<3>は<4>側にあります。
みたく文字列を順次置き直して、あとから <id>をリンクつきのHTMLで展開。
■ このスレッドは過去ログ倉庫に格納されています