トップページ⇒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を表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
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のアフィ厨がきもいのは確かだが、
「悪名高き[email protected]を引っ掛ける一方で、[email protected]を弾いてしまう」
ってのはどうなん?
ドキュモで[email protected]が取得できる以上、
それをウェブアプリ側ではじくわけにはいかないじゃん
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
[email protected] は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に準拠してさえすればいいってもんじゃない
0452nobodyさん2009/03/20(金) 10:50:52ID:???
>>449
プロバイダやgmailを除いたメジャーなアドレスで記号付きのメールアドレスを取得できる所教えてください
0453nobodyさん2009/03/20(金) 11:54:25ID:MICYHS4W
【OS名】debian etch
【PHPのバージョン】php5.2.0-8
PukiWiki Plus!で「ajaxtree.inc.php」プラグインを使おうとしたのですが
キャッシュファイルの作成が正常に行われず色々と調べてみていたところ
下記の部分でよくわからない動きをしていることがわかりました。 (ajaxtree.inc.php 198行目付近)

foreach ($pages as $page) {
if ($leaf[$page] === false) {
plugin_ajaxtree_update_cache($page);
}
echo $page . " " . $leaf[$page] . "<br>\n"; //debug
}

具体的には「plugin_ajaxtree_update_cache」関数が一度でも実行されると
その時点でループが終わってしまい配列の残りの要素が処理されなくなってしまうといった感じです。
(関数から戻ってきたあとのechoまでは処理されています)
ループ後の「$pages」の値には特に変化が無く、エラーも発生していませんでした。
なぜforeachが途中で止まってしまうのかわからずに困っています。
この場合、どういった原因が考えられるのでしょうか?
0454nobodyさん2009/03/20(金) 11:55:01ID:uQ1BNnXR
トラックバックやpingの受信機能を作っています。

fsockopenで送信されたPOSTやGETを受け取ると思うのですが、
連続送信防止の処理って入れられるのでしょうか?

WEBページのフォーム処理からだと、cookieで制御できると思うのですが
fsockopenは出来ないような気がしています。
0455nobodyさん2009/03/20(金) 12:00:40ID:???
>>453
display_errors
error_reporting
>>454
内容を比較すればいいのでは?
0456nobodyさん2009/03/20(金) 12:02:10ID:???
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこい>>449
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
0457nobodyさん2009/03/20(金) 12:06:26ID:???
小飼の正規表現は[email protected]を通せないだろ
RFCに準拠するばかりで現実で使えないんじゃ同じようにクソ
04584532009/03/20(金) 12:31:15ID:MICYHS4W
>>455
ありがとうございます。
該当するコードに特にエラーなどは発生していませんでしたが解決しました。
配列を関数の戻り値の参照として受け取っていたためおかしな挙動をしていたようでした。
$pages =& plugin_ajaxtree_get_pages();
失礼いたしました。
04594492009/03/20(金) 12:38:12ID:???
docomoの非準拠アドレスを通すかとか、gmailの無限アドレスを通すかとかは、メールアドレス正規表現とは別の問題だろ?
実装の問題じゃない。ビジネスロジックの問題だ。何をどこまで許容するかは技術の問題じゃない。
コーディングする奴が勝手に決めてはいけない問題だし、従って前提条件が提示されないと「正しい」コードなんぞ書けっこない。
何が「正しい」のか、仕様が決まってないんだから当たり前だな。

「正しい」メールアドレスを「RF2822準拠」と定めるなら、PHPSPOTや百式のコードは明白に間違っていて、小飼のコードは正しい。
docomoの非準拠アドレスを許容しなければいけない、とか、gmailの無限アドを拒否しないといけない、という条件下なら小飼のコードは間違っているだろう。

実際、小飼の出力メッセージはちゃんと「RFCに準拠しているか」で出るだろ。
あのコードが解こうとしている判定問題は「RFCに準拠しているか」であって、「一般社会で通用するメールアドレスか」じゃない。
それをてめえらは勝手に問題を取り替えてガタガタ抜かしてるだけなんだよ。これだからPHPerは馬鹿だとか言われるんだ。
RFCに準拠していないアドレスが通ったり、準拠しているアドがNGだったら文句を言うべきだが、それ以外は筋違いだ。
0460nobodyさん2009/03/20(金) 12:41:36ID:???
じゃなんで正規表現をblogに書いちゃいけないの?
0461nobodyさん2009/03/20(金) 12:47:51ID:???
>>459
RFCに準拠してる正規表現はブログに書いてもOK
RFCに準拠してない現実に即した正規表現はブログに書いたらNG
ってことですね、わかります
0462nobodyさん2009/03/20(金) 13:09:05ID:???
>>459ってブログの張本人だろ
0463nobodyさん2009/03/20(金) 16:03:22ID:???
>>459
自分ルールを持ち出したのは「PHPer」とか言って悦に入っている人だよな。
っていうか誰この人?
0464nobodyさん2009/03/20(金) 16:20:44ID:???
ほとんどの無料有料サービスの登録時にRFCに100%準拠されたメアドは使えない件
0465nobodyさん2009/03/20(金) 16:21:47ID:???
._-0-9a-zA-Zぐらいしかたいていのサービス登録では使えない件
何が言いたいかというとRFC必死だな(笑)
0466nobodyさん2009/03/20(金) 18:48:51ID:???
弾もPHPERも文末判定に$を使っているが
$は行末判定なので最後に改行コードが付いてても通ってしまう。
ちゃんと\zを使えよ
弾&phpspotともどもm9(^Д^)プギャー!
0467nobodyさん2009/03/20(金) 18:51:14ID:???
$が末尾の改行コードに一致するのってPHPだけじゃなくて?
0468nobodyさん2009/03/20(金) 18:56:31ID:???
preg_matchはperl互換だからそれはないだろ
0469nobodyさん2009/03/20(金) 19:01:48ID:???
perlが死滅した、といっても、
ある程度のシェアを取った言語なので、
perlの正規表現の文法は他の言語にも
そのまま受け継がれていくわけだな。

つまり勉強したことが無駄にならず
再利用できると。

シェアととると、こういう「いいこと」があるんだよな。
0470nobodyさん2009/03/20(金) 20:16:44ID:???
何年か前にperl厨が騒いでた
その上でどんなスクリプトでも走るエンジンみたいのどうなったんだよ
えーこら
0471nobodyさん2009/03/20(金) 22:34:03ID:oZ8fGjsV
javascriptがオンかオフかの情報を知りたいのですがどのような方法が妥当かわかりません
以下のような方法も考えたのですがページを移動するか更新しないとクッキーを読めないので困ってます
どなたかアドバイスお願いいたします


javascriptでクッキーを発行する
↓
クッキーが読み込めたらjavascriptがオン・読み込めなければオフ
0472nobodyさん2009/03/20(金) 22:44:55ID:???
>471
処理の順序を考えれば分かるが、無理。
0473nobodyさん2009/03/20(金) 22:53:31ID:???
ajaxでやればできるでしょ
0474nobodyさん2009/03/20(金) 23:15:48ID:???
そもそも、ページを移動も更新もしてない状態で、サーバ側でJavascript有効かどうか判断しなきゃ
いけない状況って何だろう?
0475nobodyさん2009/03/20(金) 23:17:56ID:???
その状況を考えられないならこの業界で食えませんよ
■ このスレッドは過去ログ倉庫に格納されています