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

【PHP】下らねぇ質問はID出して書き込みやがれ 82

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/03/09(月) 02:14:28ID:HyrthkeE
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、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:???
>>350
そこがどんな風な実装をしてるかは知らないけど。

ユーザー情報に「書き込んだ回数」を記録する。
一緒に「全ての情報を見れる権限」もフラグとしてDBに記録しておいて、書き込み回数が3回を越えた時点で true にする。
で、ページを表示するときにその権限を持ってるか持ってないかを判断する。
0353nobodyさん2009/03/17(火) 17:17:13ID:???
俺だったら「書き込んだ回数」か「全ての情報を見れる権限」のどちらかしか属性作らないな
0354nobodyさん2009/03/17(火) 17:22:32ID:???
>>353
確かに書き込み回数だけでも十分だな、すまん。
03553302009/03/17(火) 17:37:21ID:Ib1RB6YL
>>330 の回答をどなたかお願いできませんでしょうか?
0356nobodyさん2009/03/17(火) 17:44:56ID:???
>>355
自分がどうやってるか書いてないよな。推測すると、再帰でpreg_matchでもやってんのか?
まぁ、それはいいや。

単語リストをベースにトークナイザーにかけて処理するのがいいと思うよ。
03573452009/03/17(火) 18:00:29ID:s4aiV5Ak
>>352さん
>>353さん、回答下ったみなさん、有難うございました!

2ちゃんねるはじめてだったのですが回答いただけてうれしかったです。
なんとなく方向がわかったので色々やってみます。
03583302009/03/17(火) 18:07:06ID:Ib1RB6YL
>>356
すみません;
>>332 に書いたのですが、IDを出し忘れてしまって・・・

恥ずかしながら、トークナイザーというのをはじめて聞いたのですが、
どういったものなのでしょうか?
PHPには、その機能は備わっているのでしょうか?
0359nobodyさん2009/03/17(火) 19:00:40ID:???
wikiのソース参考にしてみたら?
0360nobodyさん2009/03/17(火) 19:31:59ID:???
>>330
アルゴリズムの問題だと思うけど、マッチングした文字列をいったん置き直して、展開しなすとかしたら?

日本海溝は太平洋側にあります。
<3>は太平洋側にあります。
<3>は<4>側にあります。

みたく文字列を順次置き直して、あとから <id>をリンクつきのHTMLで展開。
03613302009/03/17(火) 19:43:02ID:Ib1RB6YL
>>359
それだけの力があればそうしたいのですが・・・
基本的な考え方だけでもお願いしたいです。

>>360
おぉ!そういう方法がありましたね。
しかし、元の文章に<1>という文字列が含まれていた場合、面倒なことにならないでしょうか?
元の文章は、ユーザーが自由に投稿できる類のものなので・・・
<<<1>>>のように、括弧を増やしたり、!?!1!?!のように、複雑なものにすれば
出現する確立は減らすことができるのでしょうが、それでも0パーセントではないですし・・・

おっしゃるとおり、PHPに関する質問という範囲を超えているかもしれませんが、
どうかお付き合いお願いしたいです。
0362nobodyさん2009/03/17(火) 19:51:31ID:???
キーワードをrsortして順にリンク外文字列に対して処理していけばいい
0363nobodyさん2009/03/17(火) 19:51:53ID:???
ユーザの投稿に<1>があったら\<1\>とかにまず置き換えればいいじゃん
そんで>>360の処理のあとにもとにもどせばよい
0364nobodyさん2009/03/17(火) 20:07:16ID:???
>>330
優先順位が悪い

1,日本海溝
2,日本海
3.日本

の順でループして探索して見つかったら置き換えてbreakして位置を記録
最後に置き換えた位置から同様にして探索
これをEOFに達するまで繰り返す
03653642009/03/17(火) 20:10:19ID:???
ごめんよくよく考えたら非効率だな
忘れてくれ
03663302009/03/17(火) 21:04:12ID:Ib1RB6YL
>>362
リンク外かどうかの判定の仕方がわからなくて・・・
>>360 さんに提示していただいたように、特殊な記法に置き換える方向で行こうかと思います。

>>363
そうでした!一度エスケープのような処理をすればよかったのですね!

・・・これでなんとか解決したように思ったのですが、今度は、辞書に<id>という単語が含まれていた場合に、
問題が発生しました。

たとえば、辞書にこんな感じの単語があると、

id,word
5,<3>

長いものから置き換えるので、
まず「日本海溝」が<3>に置き換えられ、
その後、「<3>」がふたたびマッチしてしまい、
<5>に置き換えられてしまいます。

最終的に出力されるのは
<a href="word/5"><3></a>

になってしまいます。
意外と難しいですね;

>>364
位置を記憶するというのはやってみたのですが、
文字数の長い順に出現するとは限らないのでだめでした・・・;

0367nobodyさん2009/03/17(火) 21:13:49ID:???
>>366
そもそも最終的に生成するHTMLにタグじゃない < > を入れてどうする気だ。
テキストとキーワードにあらかじめhtmlspecialchars しておけばいいやん。
03683662009/03/17(火) 21:20:04ID:Ib1RB6YL
>>367
そうでした;;
キーワードもエスケープ処理しておくことでうまくいきました!

おかげさまで、当初の目的が達成できました。
もっと精進します・・・w
レスをくれたみなさん、ありがとうございました!
0369nobodyさん2009/03/17(火) 21:26:48ID:???
キーワードは最長一致させるのが原則。
"WEBプログラミング"なら、"WEB"や"プログラミング"より
"WEBプログラミング"の方が指定がより明確だから重要度が高いよね。
それに最長一致なら被らない。

処理の重さに関しては、保存時はゆっくり反映で良いので問題ない。

はてダみたいに、外部リンクのサイトのタイトルの文字列まで取得して
投稿を書き換えようとするのは外部サイトの都合で時々タイムアウトしてるけど、
自鯖の中でのリンクの置き換え程度なら、よっぽどキーワード数が多いとかじゃなければ
タイムアウトはまず起こらない。

キーワードを使うケースの場合、ROMユーザーが書き込むユーザーより圧倒的に多いし
そうでなければそのサービスは成り立たないから、ROMユーザーに対して
内容がキャッシュされてれば投稿時はかなり重い処理でも構わない。
0370nobodyさん2009/03/17(火) 21:29:46ID:???
またWikiやはてなみたいなスパムサイトが増えるのか。
0371nobodyさん2009/03/17(火) 23:09:10ID:whdlEm3/
array('a'=>'b','c'=>'d')

array('a','b','c','d')
にする簡単な方法があれば教えて下さい
0372nobodyさん2009/03/17(火) 23:25:11ID:???
>>371
foreach( $oldarray as $key => $value ){
array_push( $newarray, $key ); array_push( $newarray, $value );
}
0373nobodyさん2009/03/17(火) 23:50:49ID:???
>>371
$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:???
http://pc11.2ch.net/test/read.cgi/php/1236265877/
こっちで懐かしいやつが暴れてるぞ
0376nobodyさん2009/03/18(水) 03:57:38ID:Zcgp4DkA
文字列がintとして妥当かどうか調べるにはどうしたらいいですか?
0377nobodyさん2009/03/18(水) 04:05:19ID:???
死ぬほど既出
0378nobodyさん2009/03/18(水) 08:50:19ID:???
「intとして妥当」を説明してみろ。
0379nobodyさん2009/03/18(水) 09:22:56ID:???
is_numeric
is_int

のことじゃないかとエスパーしてみる
0380nobodyさん2009/03/18(水) 09:24:58ID:???
is_intは型判定だろ
0381nobodyさん2009/03/18(水) 09:39:50ID:???
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /
0382nobodyさん2009/03/18(水) 10:52:55ID:???
>>376
正規表現で調べればよい
if (preg_match("/^[0-9]+$/", $string)) {
 妥当
}
0383nobodyさん2009/03/18(水) 10:55:30ID:???
>>382
それだとunsigned intじゃ...
0384nobodyさん2009/03/18(水) 11:00:44ID:???
負も調べたいってこと?
なら
if (preg_match("/^-?[0-9]+$/", $string)) {
 妥当
}
かな
0385nobodyさん2009/03/18(水) 11:03:09ID:???
ちなみに指数表記やInfinityまで対応というなら
またパターンを増やせばよい
0386nobodyさん2009/03/18(水) 11:07:58ID:???
あと厳密にintならPHPの場合何バイトかしらないけど(たぶん4?)
その辺も考慮しないといかんかな
strlenで32ビット以内かどうか調べる処理とか
0387nobodyさん2009/03/18(水) 11:10:31ID:???
strlenは関係ない
2^32を2の補数で表した値の範囲かどうかだな
?2147483648〜2147483647
0388nobodyさん2009/03/18(水) 11:22:00ID:???
preg_match("/^-?[0-9]+$/", $string) && $string >= -2147483648 && $string <= 2147483647
0389nobodyさん2009/03/18(水) 11:46:44ID:???
$は改行にもマッチするから、D修飾子を付ける
それから、0123は整数か?
0390nobodyさん2009/03/18(水) 12:01:38ID:???
>>388
厳密な数値かはわからないよね
だってそれだと下のどれでも引っかかるからね

123
-123
"123"
"-123"
0391nobodyさん2009/03/18(水) 12:13:56ID:???
つ[:digit:]
0392nobodyさん2009/03/18(水) 12:33:33ID:???
質問者があいまいなまま補足してくれないのにこぞって答えなくても
0393nobodyさん2009/03/18(水) 13:00:35ID:???
0xa0 だって立派にint型を表現した文字列として妥当といえるよねー
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
なぜimagecreatefrombmpは無いんですか?
デジカメとかだとBMPで出力するカメラも結構有るし需要あると思うけど。
ビットマップからイメージ作れるユーザー関数ありますか?
0398nobodyさん2009/03/18(水) 14:25:50ID:???
>>397
User Contributed Notesの一番上
0399nobodyさん2009/03/18(水) 14:47:40ID:meKzf6DJ
クラス内のメソッドはだいたい何行くらいで収めるのが目安でしょうか?
0400nobodyさん2009/03/18(水) 15:58:45ID:???
50行くらい
0401nobodyさん2009/03/18(水) 16:21:37ID:???
>>399
そんなのきまってない
0402nobodyさん2009/03/18(水) 16:42:30ID:???
http://hightide.blog2.fc2.com/blog-entry-146.html
0403nobodyさん2009/03/18(水) 17:10:10ID:???
>>399
画面半分に納めるのはよいプラクティスだって昔だれかがいってた。
スクロールしないと見れないメソッドはクソの匂いがするとも。
0404nobodyさん2009/03/18(水) 19:19:39ID:???
>>392
ザコは黙ってろ
0405nobodyさん2009/03/18(水) 19:20:32ID:???
>>399
pearのコーディング規約に1行何文字程度に収めるか決めてるから参考に読んでこれば
0406nobodyさん2009/03/18(水) 19:48:17ID:???
1行あたりの文字数と
メソッドを何行に収めるかの話が
関係あるのか?
0407nobodyさん2009/03/18(水) 20:07:04ID:???
掛け軸ぐらいな縦長のモニタだったら余裕だなw
0408nobodyさん2009/03/18(水) 20:37:37ID:???
フォントを1ドットにしてもいいぞ
0409nobodyさん2009/03/18(水) 21:09:42ID:???
>>406
既に答えが出てるだろ
ゆとりかおまえ
0410nobodyさん2009/03/18(水) 21:14:44ID:???
お前は何を言ってるんだ
0411nobodyさん2009/03/18(水) 22:22:03ID:???
>>410はゆとりだから気にしなくていいよ
0412nobodyさん2009/03/18(水) 23:15:59ID:gf2MXR+O
本運用のリモートのunix系鯖か、
開発のローカルのwinかで、
デバッグ云々用とかで判別するのは
if (DIRECTORY_SEPARATOR == '/') { ...
で問題なし?
0413nobodyさん2009/03/19(木) 00:18:23ID:???
開発環境をunixにしたくなったら詰むな。
それと、Win環境で本番環境同様の状態をエミュレートしたくなった場合も身動きが取れなくなる。

function isDevelopEnvironment()
とかをどこかグローバルにアクセスできる場所(グローバル関数か、クラスのstatic関数)に置いとけ。
他の場所からはこの関数で判定するようにしておけば、判定方法が変わっても変更が一箇所で済む。
実装と意図の分離は設計の基礎。
呼び出し側でやりたい事(意図)は環境の判別なのだから、関数名はそうなっているべき。
環境を識別するのにDIRECTORY_SEPARATORを使う、ってのは実装の話で、意図じゃない。
(もっと言うなら、開発環境がWinで運用環境がUnixなのも「たまたまそうなってる」だけの、つまり実装依存な話)

で、実装の話だが。
俺ならホスト名を開発環境と本番環境で変えておいて、それで識別する。もしくは設定ファイルか何かに書いておく。
WinとUnixを識別できればそれでいい、ってんなら>412で問題ない。
php_uname()関数の例にもディレクトリ・セパレータでOSを判別するコードが載っている。
0414nobodyさん2009/03/19(木) 00:19:30ID:???
>>379
それ。
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:???
((string)(int) $string === $string)
これはどう?int判定
0416nobodyさん2009/03/19(木) 00:34:08ID:???
PHP_OS
0417nobodyさん2009/03/19(木) 00:35:21ID:???
>>399
行数っていうのとは違うけど
コメントを書かなくていいくらいに分かり易い
っていうのを目安にするといいっていう考え方もあるね。

コメントで「○○を処理する」とか入れるくらいなら
そのまとまりをprivateなメソッドにする感じ。


まぁ好き嫌いもあるけどねー。
0418nobodyさん2009/03/19(木) 00:46:01ID:???
>>285

OOPっていう概念よりも
そもそもプログラミングにおいてクラス使うと何が便利?
って考えたほうが分かりやすいかもしんない。
0419nobodyさん2009/03/19(木) 00:49:33ID:???
DIRECTORY_SEPARATORでOS判定なんてどう考えてもスジが悪いだろ
常識で考えて・・
0420nobodyさん2009/03/19(木) 01:56:19ID:???
>>414
ctype_digit
でいいんじゃないの、バージョン注意だけど
0421nobodyさん2009/03/19(木) 09:10:09ID:8+csUcRF
fsockopenのテストをしているのですが、
ローカルのサーバ(localhost)上ではオープンできないのでしょうか?

if(!$sock = fsockopen("localhost",80,$errNo,$errStr,10)){
echo "エラーです";
}

として開こうとしても、エラーになります。
0422nobodyさん2009/03/19(木) 09:28:15ID:???
なんのために$errNoと$errStrを指定してるんだ
04234212009/03/19(木) 09:32:30ID:???
localhostを127.0.0.1にしたら出来ました・・。
0424nobodyさん2009/03/19(木) 09:39:19ID:???
もしかして環境はVistaか?
最近のアップデートで、hostsを書き換えてlocalhostを消すものがあったと話題になってた。

3/10のWindows Defender更新でhostsが書き換えられる!? - スラッシュドット・ジャパン

ttp://slashdot.jp/articles/09/03/11/0924257.shtml
0425nobodyさん2009/03/19(木) 11:06:59ID:GwakzSEQ
【PHPのバージョン】php5.2.8
【質問内容】
クラスのメンバ変数についての質問です。
あるメンバ変数が宣言されたかどうかを調べるにはどうしたらよいでしょうか?
代入はされていないのでissetではダメでした。
0426nobodyさん2009/03/19(木) 11:10:22ID:???
get_object_vars
もしくは
get_class_vars
04274252009/03/19(木) 11:16:32ID:???
>>426
超速でありがとうございます
さっそくテストコードにかかってきます。
0428nobodyさん2009/03/19(木) 11:18:46ID:???
is_nullのほうがいいよ
0429nobodyさん2009/03/19(木) 11:37:30ID:???
issetのほうがいいよ
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タグの部分を置換したいです。
もっと、スマートの方法ありますか?
(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:???
訂正 スマートな方法
0433nobodyさん2009/03/19(木) 13:32:20ID:???
>>420
ctype_digitってマイナス値の場合falseになるから使えなくね
0434nobodyさん2009/03/19(木) 14:15:42ID:???
>>431
何に置換したいのか書いてないよ

あと>>1
0435nobodyさん2009/03/19(木) 21:43:36ID:???
まだやってんのか。
strval(intval($str)) === $str
でいいだろ、面倒くせえ。
0436nobodyさん2009/03/19(木) 22:14:40ID:???
>>435
これはひどい
0437nobodyさん2009/03/19(木) 23:11:37ID:???
>>420
その関数はバグがあるから使い物にならない
0438nobodyさん2009/03/20(金) 04:10:54ID:???
http://phpspot.org/blog/archives/2009/03/phpblog.html
0439nobodyさん2009/03/20(金) 04:22:45ID:???
>>438
この人前も誰かにつつかれてキレてたよなw
0440nobodyさん2009/03/20(金) 08:33:43ID:???
三行でまとめてくれ
0441nobodyさん2009/03/20(金) 08:38:37ID:???
お前と同じで内容もロクに読まずに転載してるだけですよ、と言ってあげたい
0442nobodyさん2009/03/20(金) 08:40:35ID:???
phpspotのアフィ厨がきもいのは確かだが、
「悪名高きda.me..@docomo.ne.jpを引っ掛ける一方で、dankogai+regexp@gmail.comを弾いてしまう」
ってのはどうなん?
ドキュモでda.me..@docomo.ne.jpが取得できる以上、
それをウェブアプリ側ではじくわけにはいかないじゃん
RFCを守るべきはdocomoであって、ウェブアプリは現実に準拠するしかない
0443nobodyさん2009/03/20(金) 08:45:13ID:???
phpspotの人は正規表現について語らないほうがいいのでは
http://labs.cybozu.co.jp/blog/akky/archives/2007/10/phpspot-bad-regex.html

このトラウマを刺激されたから過剰反応したんだなw
0444nobodyさん2009/03/20(金) 08:47:16ID:???
Diggのトップページやdel.icio.us/popularで表示されたページの概要を訳しているだけなんだから、
せめて自分で確かめてから紹介しようよw
>>phpspot
0445nobodyさん2009/03/20(金) 08:57:25ID:???
>442
dankogai+regexp@gmail.com はRFCに準拠している。
ドキュモを弾くかはか方針次第だが、このアドレスを弾いてはいけない。

元々phpspotの提示していたコードが役に立たないのは確か。
出力例が「正しいかもしれない」「間違ってるかもしれない」な事からも明らか。
こういうのは「絶対正しい」「間違ってるかも」、もしくは「正しいかも」「絶対間違ってる」のいずれかを返さなければ糞の役にも立たん。
0446nobodyさん2009/03/20(金) 09:47:11ID:???
準拠してようがおれはそんなメアドは通さねーぞwwwwwwwwwwwwwwwww
0447nobodyさん2009/03/20(金) 09:59:17ID:???
ttp://d.hatena.ne.jp/elf/20060809/1155100104
0448nobodyさん2009/03/20(金) 10:02:52ID:???
プロバイダのメールアドレスをなるべき通したい場合は別にそこまでこだわる必要なし
+\とか記号を入れるメアドなんて普通の人は持ってないだろ
0449nobodyさん2009/03/20(金) 10:23:25ID:???
>448
なんというか、ここにも馬鹿が多いな。
「食べやすい大きさに野菜を切るには」という記事に「カレーは野菜が大きいほうが美味しい」とか言ってるようなものだぞ、それ。
0450nobodyさん2009/03/20(金) 10:31:42ID:???
それ話が通ってるじゃん
0451nobodyさん2009/03/20(金) 10:49:03ID:???
RFCに準拠してさえすればいいってもんじゃない
■ このスレッドは過去ログ倉庫に格納されています