【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を表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
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で展開。
0361330
2009/03/17(火) 19:43:02ID:Ib1RB6YLそれだけの力があればそうしたいのですが・・・
基本的な考え方だけでもお願いしたいです。
>>360
おぉ!そういう方法がありましたね。
しかし、元の文章に<1>という文字列が含まれていた場合、面倒なことにならないでしょうか?
元の文章は、ユーザーが自由に投稿できる類のものなので・・・
<<<1>>>のように、括弧を増やしたり、!?!1!?!のように、複雑なものにすれば
出現する確立は減らすことができるのでしょうが、それでも0パーセントではないですし・・・
おっしゃるとおり、PHPに関する質問という範囲を超えているかもしれませんが、
どうかお付き合いお願いしたいです。
0362nobodyさん
2009/03/17(火) 19:51:31ID:???0363nobodyさん
2009/03/17(火) 19:51:53ID:???そんで>>360の処理のあとにもとにもどせばよい
0364nobodyさん
2009/03/17(火) 20:07:16ID:???優先順位が悪い
1,日本海溝
2,日本海
3.日本
の順でループして探索して見つかったら置き換えてbreakして位置を記録
最後に置き換えた位置から同様にして探索
これをEOFに達するまで繰り返す
0365364
2009/03/17(火) 20:10:19ID:???忘れてくれ
0366330
2009/03/17(火) 21:04:12ID:Ib1RB6YLリンク外かどうかの判定の仕方がわからなくて・・・
>>360 さんに提示していただいたように、特殊な記法に置き換える方向で行こうかと思います。
>>363
そうでした!一度エスケープのような処理をすればよかったのですね!
・・・これでなんとか解決したように思ったのですが、今度は、辞書に<id>という単語が含まれていた場合に、
問題が発生しました。
たとえば、辞書にこんな感じの単語があると、
id,word
5,<3>
長いものから置き換えるので、
まず「日本海溝」が<3>に置き換えられ、
その後、「<3>」がふたたびマッチしてしまい、
<5>に置き換えられてしまいます。
最終的に出力されるのは
<a href="word/5"><3></a>
になってしまいます。
意外と難しいですね;
>>364
位置を記憶するというのはやってみたのですが、
文字数の長い順に出現するとは限らないのでだめでした・・・;
0367nobodyさん
2009/03/17(火) 21:13:49ID:???そもそも最終的に生成するHTMLにタグじゃない < > を入れてどうする気だ。
テキストとキーワードにあらかじめhtmlspecialchars しておけばいいやん。
0368366
2009/03/17(火) 21:20:04ID:Ib1RB6YLそうでした;;
キーワードもエスケープ処理しておくことでうまくいきました!
おかげさまで、当初の目的が達成できました。
もっと精進します・・・w
レスをくれたみなさん、ありがとうございました!
0369nobodyさん
2009/03/17(火) 21:26:48ID:???"WEBプログラミング"なら、"WEB"や"プログラミング"より
"WEBプログラミング"の方が指定がより明確だから重要度が高いよね。
それに最長一致なら被らない。
処理の重さに関しては、保存時はゆっくり反映で良いので問題ない。
はてダみたいに、外部リンクのサイトのタイトルの文字列まで取得して
投稿を書き換えようとするのは外部サイトの都合で時々タイムアウトしてるけど、
自鯖の中でのリンクの置き換え程度なら、よっぽどキーワード数が多いとかじゃなければ
タイムアウトはまず起こらない。
キーワードを使うケースの場合、ROMユーザーが書き込むユーザーより圧倒的に多いし
そうでなければそのサービスは成り立たないから、ROMユーザーに対して
内容がキャッシュされてれば投稿時はかなり重い処理でも構わない。
0370nobodyさん
2009/03/17(火) 21:29:46ID:???0371nobodyさん
2009/03/17(火) 23:09:10ID:whdlEm3/を
array('a','b','c','d')
にする簡単な方法があれば教えて下さい
0372nobodyさん
2009/03/17(火) 23:25:11ID:???foreach( $oldarray as $key => $value ){
array_push( $newarray, $key ); array_push( $newarray, $value );
}
0373nobodyさん
2009/03/17(火) 23:50:49ID:???$newArray = array_merge(array_keys($oldArray), array_values($oldArray));
0374nobodyさん
2009/03/17(火) 23:52:05ID:???$newArray = array_keys($oldArray) + array_values($oldArray);
0375nobodyさん
2009/03/18(水) 02:04:43ID:???こっちで懐かしいやつが暴れてるぞ
0376nobodyさん
2009/03/18(水) 03:57:38ID:Zcgp4DkA0377nobodyさん
2009/03/18(水) 04:05:19ID:???0378nobodyさん
2009/03/18(水) 08:50:19ID:???0379nobodyさん
2009/03/18(水) 09:22:56ID:???is_int
のことじゃないかとエスパーしてみる
0380nobodyさん
2009/03/18(水) 09:24:58ID:???0381nobodyさん
2009/03/18(水) 09:39:50ID:???///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
0382nobodyさん
2009/03/18(水) 10:52:55ID:???正規表現で調べればよい
if (preg_match("/^[0-9]+$/", $string)) {
妥当
}
0384nobodyさん
2009/03/18(水) 11:00:44ID:???なら
if (preg_match("/^-?[0-9]+$/", $string)) {
妥当
}
かな
0385nobodyさん
2009/03/18(水) 11:03:09ID:???またパターンを増やせばよい
0386nobodyさん
2009/03/18(水) 11:07:58ID:???その辺も考慮しないといかんかな
strlenで32ビット以内かどうか調べる処理とか
0387nobodyさん
2009/03/18(水) 11:10:31ID:???2^32を2の補数で表した値の範囲かどうかだな
?2147483648〜2147483647
0388nobodyさん
2009/03/18(水) 11:22:00ID:???0389nobodyさん
2009/03/18(水) 11:46:44ID:???それから、0123は整数か?
0390nobodyさん
2009/03/18(水) 12:01:38ID:???厳密な数値かはわからないよね
だってそれだと下のどれでも引っかかるからね
123
-123
"123"
"-123"
0391nobodyさん
2009/03/18(水) 12:13:56ID:???0392nobodyさん
2009/03/18(水) 12:33:33ID:???0393nobodyさん
2009/03/18(水) 13:00:35ID:???0394nobodyさん
2009/03/18(水) 13:17:37ID:???0395nobodyさん
2009/03/18(水) 13:24:34ID:???0396nobodyさん
2009/03/18(水) 13:27:19ID:???いちいちグチグチ言うやつは黙ってればいい
0397nobodyさん
2009/03/18(水) 14:23:57ID:R7u4YHhcデジカメとかだとBMPで出力するカメラも結構有るし需要あると思うけど。
ビットマップからイメージ作れるユーザー関数ありますか?
0399nobodyさん
2009/03/18(水) 14:47:40ID:meKzf6DJ0400nobodyさん
2009/03/18(水) 15:58:45ID:???0402nobodyさん
2009/03/18(水) 16:42:30ID:???0403nobodyさん
2009/03/18(水) 17:10:10ID:???画面半分に納めるのはよいプラクティスだって昔だれかがいってた。
スクロールしないと見れないメソッドはクソの匂いがするとも。
0406nobodyさん
2009/03/18(水) 19:48:17ID:???メソッドを何行に収めるかの話が
関係あるのか?
0407nobodyさん
2009/03/18(水) 20:07:04ID:???0408nobodyさん
2009/03/18(水) 20:37:37ID:???0410nobodyさん
2009/03/18(水) 21:14:44ID:???0412nobodyさん
2009/03/18(水) 23:15:59ID:gf2MXR+O開発のローカルのwinかで、
デバッグ云々用とかで判別するのは
if (DIRECTORY_SEPARATOR == '/') { ...
で問題なし?
0413nobodyさん
2009/03/19(木) 00:18:23ID:???それと、Win環境で本番環境同様の状態をエミュレートしたくなった場合も身動きが取れなくなる。
function isDevelopEnvironment()
とかをどこかグローバルにアクセスできる場所(グローバル関数か、クラスのstatic関数)に置いとけ。
他の場所からはこの関数で判定するようにしておけば、判定方法が変わっても変更が一箇所で済む。
実装と意図の分離は設計の基礎。
呼び出し側でやりたい事(意図)は環境の判別なのだから、関数名はそうなっているべき。
環境を識別するのにDIRECTORY_SEPARATORを使う、ってのは実装の話で、意図じゃない。
(もっと言うなら、開発環境がWinで運用環境がUnixなのも「たまたまそうなってる」だけの、つまり実装依存な話)
で、実装の話だが。
俺ならホスト名を開発環境と本番環境で変えておいて、それで識別する。もしくは設定ファイルか何かに書いておく。
WinとUnixを識別できればそれでいい、ってんなら>412で問題ない。
php_uname()関数の例にもディレクトリ・セパレータでOSを判別するコードが載っている。
0414nobodyさん
2009/03/19(木) 00:19:30ID:???それ。
is_numeric()は"."を許したよーな気がする。
気をつけたほうがいいよ〜
D:\tools\php-5.2.8-Win32>php -r "var_dump( is_numeric( '1.5' ) ) ;"
bool(true)
0415nobodyさん
2009/03/19(木) 00:31:24ID:???これはどう?int判定
0416nobodyさん
2009/03/19(木) 00:34:08ID:???0417nobodyさん
2009/03/19(木) 00:35:21ID:???行数っていうのとは違うけど
コメントを書かなくていいくらいに分かり易い
っていうのを目安にするといいっていう考え方もあるね。
コメントで「○○を処理する」とか入れるくらいなら
そのまとまりをprivateなメソッドにする感じ。
まぁ好き嫌いもあるけどねー。
0418nobodyさん
2009/03/19(木) 00:46:01ID:???OOPっていう概念よりも
そもそもプログラミングにおいてクラス使うと何が便利?
って考えたほうが分かりやすいかもしんない。
0419nobodyさん
2009/03/19(木) 00:49:33ID:???常識で考えて・・
0421nobodyさん
2009/03/19(木) 09:10:09ID:8+csUcRFローカルのサーバ(localhost)上ではオープンできないのでしょうか?
if(!$sock = fsockopen("localhost",80,$errNo,$errStr,10)){
echo "エラーです";
}
として開こうとしても、エラーになります。
0422nobodyさん
2009/03/19(木) 09:28:15ID:???0423421
2009/03/19(木) 09:32:30ID:???0424nobodyさん
2009/03/19(木) 09:39:19ID:???最近のアップデートで、hostsを書き換えてlocalhostを消すものがあったと話題になってた。
3/10のWindows Defender更新でhostsが書き換えられる!? - スラッシュドット・ジャパン
ttp://slashdot.jp/articles/09/03/11/0924257.shtml
0425nobodyさん
2009/03/19(木) 11:06:59ID:GwakzSEQ【質問内容】
クラスのメンバ変数についての質問です。
あるメンバ変数が宣言されたかどうかを調べるにはどうしたらよいでしょうか?
代入はされていないのでissetではダメでした。
0426nobodyさん
2009/03/19(木) 11:10:22ID:???もしくは
get_class_vars
0428nobodyさん
2009/03/19(木) 11:18:46ID:???0429nobodyさん
2009/03/19(木) 11:37:30ID:???0430nobodyさん
2009/03/19(木) 12:38:06ID:???http://jp.php.net/manual/ja/function.property-exists.php
0431nobodyさん
2009/03/19(木) 13:18:49ID:???もっと、スマートの方法ありますか?
(h1の要素は不特定、ない場合もあります。)
<?php
$file = "
<html><body>
<h1 id=\"news\" name=\"news\" style=\"size: medium;\">WBC速報</h1>
<p>4回裏 2 - 0</p>
</body></html>
";
preg_match_all('/<h1[^>]*?>(.*?)<\/h1>/is',$file , $match);
$tag = $match[0][0];
$title = $match[1][0];
$file = str_replace($tag,"<div>{$title}</div>", $file);
echo $file;
?>
0432nobodyさん
2009/03/19(木) 13:21:15ID:???0435nobodyさん
2009/03/19(木) 21:43:36ID:???strval(intval($str)) === $str
でいいだろ、面倒くせえ。
0438nobodyさん
2009/03/20(金) 04:10:54ID:???0440nobodyさん
2009/03/20(金) 08:33:43ID:???0441nobodyさん
2009/03/20(金) 08:38:37ID:???0442nobodyさん
2009/03/20(金) 08:40:35ID:???「悪名高きda.me..@docomo.ne.jpを引っ掛ける一方で、dankogai+regexp@gmail.comを弾いてしまう」
ってのはどうなん?
ドキュモでda.me..@docomo.ne.jpが取得できる以上、
それをウェブアプリ側ではじくわけにはいかないじゃん
RFCを守るべきはdocomoであって、ウェブアプリは現実に準拠するしかない
0443nobodyさん
2009/03/20(金) 08:45:13ID:???http://labs.cybozu.co.jp/blog/akky/archives/2007/10/phpspot-bad-regex.html
このトラウマを刺激されたから過剰反応したんだなw
0444nobodyさん
2009/03/20(金) 08:47:16ID:???せめて自分で確かめてから紹介しようよw
>>phpspot
0445nobodyさん
2009/03/20(金) 08:57:25ID:???dankogai+regexp@gmail.com はRFCに準拠している。
ドキュモを弾くかはか方針次第だが、このアドレスを弾いてはいけない。
元々phpspotの提示していたコードが役に立たないのは確か。
出力例が「正しいかもしれない」「間違ってるかもしれない」な事からも明らか。
こういうのは「絶対正しい」「間違ってるかも」、もしくは「正しいかも」「絶対間違ってる」のいずれかを返さなければ糞の役にも立たん。
0446nobodyさん
2009/03/20(金) 09:47:11ID:???0447nobodyさん
2009/03/20(金) 09:59:17ID:???0448nobodyさん
2009/03/20(金) 10:02:52ID:???+\とか記号を入れるメアドなんて普通の人は持ってないだろ
0449nobodyさん
2009/03/20(金) 10:23:25ID:???なんというか、ここにも馬鹿が多いな。
「食べやすい大きさに野菜を切るには」という記事に「カレーは野菜が大きいほうが美味しい」とか言ってるようなものだぞ、それ。
0450nobodyさん
2009/03/20(金) 10:31:42ID:???0451nobodyさん
2009/03/20(金) 10:49:03ID:???■ このスレッドは過去ログ倉庫に格納されています