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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/12/08(火) 13:53:09ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 90
http://pc11.2ch.net/test/read.cgi/php/1258187482/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
01841402009/12/12(土) 21:11:42ID:iG1HMcs+
>>143
できればスクリプトか詳しいサイトをご紹介いただけないでしょうか。
自分で調べた限りだとgoogle(あっても+Yahoo!)のみ対応で、bingに対応したものが
なかったもので。。
よろしくお願いします。
0185nobodyさん2009/12/12(土) 21:14:17ID:4mjex3cq
先達様方、さっくり質問です。
class内のメンバ変数の有無を調べる関数ってありますか?

$cname = "HOGE";
class_exists($cname)

みたいな(こっちはclassですが)
0186nobodyさん2009/12/12(土) 21:24:35ID:???
さっくりじゃなくて真面目に質問してください
0187nobodyさん2009/12/12(土) 21:31:36ID:???
>>184
んなもbingで検索してurl見ればわかることだろ
0188nobodyさん2009/12/12(土) 21:41:08ID:???
くだらないから質問したんですが…。

冷血さんですね。

もういいです。さよなら。
0189nobodyさん2009/12/12(土) 21:45:54ID:???
ルールを守れない自分勝手な人ですね。
さよなら。
0190nobodyさん2009/12/12(土) 21:46:53ID:???
http://pc11.2ch.net/test/read.cgi/php/1158647441/
0191nobodyさん2009/12/12(土) 22:00:01ID:???
PHPを書くときにおすすめのテキストエディタってなんですか?
0192nobodyさん2009/12/12(土) 22:02:19ID:???
Eclipse
NetBeans
さあ選べ
0193nobodyさん2009/12/12(土) 22:04:27ID:???
<textarea>
0194nobodyさん2009/12/12(土) 22:09:10ID:d/+O720A
ノートとペンで書け
0195nobodyさん2009/12/12(土) 22:21:22ID:???
古よりの言い伝えでは、

  漢はecho一発

だそうだよ。
0196nobodyさん2009/12/12(土) 23:38:34ID:+z/QEKQm
2chのレス指定にマッチする正規表現を書きたいのですが、
>>2,4,6
のような表現の数値のみにマッチする正規表現として
preg_match(/(\d+)(?:,(\d+))$/, $body, $match)
としました。

しかし、$matchに格納されるのは2と6のみで、4が欠落しています。
どのように修正すればよろしいでしょうか?
0197nobodyさん2009/12/13(日) 00:51:58ID:???
へー、それで2・4・6にレス指定できる2chブラウザあるんだ
0198nobodyさん2009/12/13(日) 02:11:52ID:???
>>196
\d*(,\d*)+$ でとって、 , で区切れば?
0199nobodyさん2009/12/13(日) 02:26:55ID:???
>>196 このレスみたいに必ずレス指定が文字列の最後に来るとは限らないよ
0200nobodyさん2009/12/13(日) 02:48:11ID:???
>>1-10,15,20-
こんな指定も出来るよ
0201nobodyさん2009/12/13(日) 03:10:23ID:???
正規表現の質問が多いが、
PHPでの使い方がわからないならともかく
正しい表現がわからないのなら、PHPの質問ではないな。
0202nobodyさん2009/12/13(日) 05:24:36ID:G260+aAJ
外部のファイルをそのままサーバー側にダウンロードできる関数はありますか?
以下のように書いていると負荷が余計にかかるような気がします
$lines=file("http://○○");
$fp=fopen("○○","w");
flock($fp,2);
for($j=0;$i<count($lines);$j++){
fputs($fp,$lines[$j]);
}
fclose($fp);
0203nobodyさん2009/12/13(日) 05:29:25ID:???
>>202
リモートの方も同じfopenで開いて読み込みながら書き込んでいく感じ
while (!foef($remote))
{
fputs($fp, fgets($remote, 4096));
}

0204nobodyさん2009/12/13(日) 05:38:20ID:G260+aAJ
>>203
ありがとうございます
参考にさせてもらいます
0205nobodyさん2009/12/13(日) 06:02:18ID:???
>>202
普通にcopy()で出来るのよ。
0206nobodyさん2009/12/13(日) 06:56:34ID:???
この難読化されたPHPをデコードするには何を使えばいいのでしょうか
<?php if(!function_exists('findsysfolder')){function findsysfolder($fld){$fld1=dirname($fld);$fld=$fld1.'/';clearstatcache();
if(!is_dir($fld))return findsysfolder($fld1);else return $fld;}}require_once(findsysfolder(__FILE__).'/ksky.php');
$REXISTHECAT4FBI='FE50E574D754E76AC679F242F450F768FB5DCB77F34DE341
660C280D176E374DE7FB3B090A782B6B68DBC97BEAD93B681C452F25BE26';
g0666f0acdeed38d4cd9084ade1739498(f0666f0acdeed38d4cd9084ade1739498(__FILE__));
$REXISTHEDOG4FBI='FD7886F4 335AF115A53C3B66FE61CBA14C6 224A72ABC69EF2916663278A03
以下省略
0207nobodyさん2009/12/13(日) 09:20:44ID:jg9ODR2i
日付変わってしまったのでID違うと思いますが>>157です。
>>158でviewvcを使えばいいといわれ調べてみたんですが
バージョン管理がどうとかいうソフトなのでしょうかこれは。

chasenを入れたいのですがこれをどう使えばPHPに導入できるのかわかりません。
すいませんがもう少しヒントもらえないでしょうか。
0208nobodyさん2009/12/13(日) 10:08:25ID:???
>>206
どこが難読化なんだと小一時間(ry
0209nobodyさん2009/12/13(日) 10:48:02ID:???
>>196
/\>*?[0-90-9]+/
0210nobodyさん2009/12/13(日) 10:49:59ID:???
>>207
viewVC 使い方とかでggってから質問したんですよね
0211nobodyさん2009/12/13(日) 11:02:47ID:???
>>206 うんこ臭いコードだな

>>209 []内にマルチバイト使うのはどうかと
0212nobodyさん2009/12/13(日) 11:04:07ID:???
>>211
では正解をどうぞ
0213nobodyさん2009/12/13(日) 11:25:10ID:???
正解て(笑)
02142112009/12/13(日) 11:35:26ID:???
文字コードが書いてないから例えばSJISだったら以下のように書けばマルチバイトに対応できる

$body= "foobar>>2,4,28,6hoge";
preg_match('/>((?:\d|\x82[\x4f-\x58])+(?:,(?:\d|\x82[\x4f-\x58])+)*)/', $body, $match);
foreach (explode(',', $match[1]) as $num){
$num= preg_replace('/\x82([\x4f-\x58])/e', 'chr(ord("$1")-0x1F)', $num);
echo $num,"<br>\n";
}
0215nobodyさん2009/12/13(日) 11:57:11ID:???
utf-8ならマルチバイトで書き込めるけどそれを否定した君の知識を疑いたい
02162112009/12/13(日) 12:31:34ID:???
文字コード後出しして知識を疑われてしまったけど、例えば209の書き方だと
「新潟」にもマッチするぞ。utf-8ならu修飾子付けることをお奨めする。
おれの知識はこの程度だ。
0217nobodyさん2009/12/13(日) 12:34:51ID:???
PHP
0218nobodyさん2009/12/13(日) 12:56:34ID:???
>>210
しました。
ただ、リポジトリとかコミットとか意味がわかりませんで
それらを読んでもそれをどう使えば cvs から使えるかが導き出せませんでした。
0219nobodyさん2009/12/13(日) 13:04:25ID:???
おやおや^^ここのページのトップに分かりやすく書いてあるのにおかしいですね^^
ttp://www.google.co.jp/search?q=viewvc&lr=lang_ja&ie=utf-8&oe=utf-8
0220nobodyさん2009/12/13(日) 13:14:42ID:???
そういえばクラス使うようになってグローバル変数使わなくなったな。
02211962009/12/13(日) 13:19:08ID:iFkYaR3P
文字コードは考慮しなくていいです。
>>196の正規表現だと、最初と最後にしかマッチしないというのが問題なんです。

>>2,4
は2と4が抜き出せますが、
>>2,4,6
は2と6で、
>>2,4,6,8
は2と8しか抜き出せません。

どのように修正すればいいでしょうか?
0222nobodyさん2009/12/13(日) 13:25:03ID:???
preg_match_all
02231962009/12/13(日) 16:42:49ID:iFkYaR3P
>>222
全体のマッチは求めていません。
あくまで単数の>>2,4などにマッチすればいいです。
0224nobodyさん2009/12/13(日) 17:03:44ID:???
preg_matchにこだわるなら以下のようなものは取れませんよね

>>2
>>4-5
>>300
02251962009/12/13(日) 17:31:01ID:iFkYaR3P
>>224
バリデーションに使用するだけなので、レスの置き換えは想定していません。
0226nobodyさん2009/12/13(日) 17:47:20ID:???
/(\d+)(,|-|\d){1,}/
02271962009/12/13(日) 18:06:05ID:iFkYaR3P
>>226
だめです。

<?php
preg_match('/(\d+)(,|-|\d+){1,}/', '2,6,18,11', $match);
print_r($match);

Array ( [0] => 2,6,18,11 [1] => 2 [2] => 11 )
0228nobodyさん2009/12/13(日) 18:17:04ID:???
preg_replace() 使えよ
0229nobodyさん2009/12/13(日) 18:20:12ID:???
>>277
君も頑固だねpreg_matchじゃダメっていってるのに


preg_match_all('/(>*?-?\d+)/', '2,6,18,11', $match);
print_r($match);
0230nobodyさん2009/12/13(日) 18:22:07ID:???
ここは正規表現のスレではありません。
移動してください。

正規表現道場
http://pc11.2ch.net/test/read.cgi/php/1168450843/

正規表現 Part6(@ム板)
http://pc12.2ch.net/test/read.cgi/tech/1241537764/
02311962009/12/13(日) 18:36:47ID:iFkYaR3P
>>229
できました。ありがとうございます。
ほかの方も、正解はありませんでしたがありがとうございました。

ただ、なぜだめなのかいまいちよくわかりません。
私は限界ですが、がんばればうまくいきそうな気がします。
02321962009/12/13(日) 18:41:44ID:iFkYaR3P
>>229
試したら、,2>4みたいな変なものにもマッチしますね。
あくまでもバリデーションなので、
>>2,4などにはマッチしてほしいですが、不正なものははじきたいです。
0233nobodyさん2009/12/13(日) 18:45:59ID:???
何でもかんでも聞かないで少しは自分で改良する努力しろよ

preg_match_all('/>*?(\d*\-?\d+)/', '2>4,>>6-9,18,11', $match);
print_r($match);
02341962009/12/13(日) 19:07:59ID:iFkYaR3P
>>233
改良し、限界と感じたのでお助けを請うているのです。

バリデーションの意味を勘違いされていると思いますが、2>4は弾くべきなのです。
私が求めているものは、>>2,3,4などのあくまでベーシックなレスのみで、ほかには必要ありません。
0235nobodyさん2009/12/13(日) 19:30:27ID:???
>>234
改良されちゃいましたか
もうあなたはこのスレのレベルを超えているように感じられます
申し訳ございませんが、他を当たって頂けますでしょうか?

こちらもよりご満足頂ける回答ができるよう日々精進して参りたいと思っております
0236nobodyさん2009/12/13(日) 19:50:24ID:???
>>196
レスにマッチするものとか書いてるくせに
preg_match(/(\d+)(?:,(\d+))$/, $body, $match)
のどこがするのか聞きたい
何で>が入ってないの?適当に書いとけば誰かがやってくれるとおもってるんでしょ
0237nobodyさん2009/12/13(日) 19:54:50ID:???
preg_match_all('/>+(\d+\-?\d*)/', '2>4,>>6-9,18,11', $match);
0238nobodyさん2009/12/13(日) 20:06:34ID:???
>>196はお金出して、言う事聞くやつを探す方がいよさげ。
0239nobodyさん2009/12/13(日) 20:15:23ID:???
>>238
侮辱してるんですか?
市ねよキチガイ
02401962009/12/13(日) 20:21:24ID:iFkYaR3P
>>236
>適当に書いとけば誰かがやってくれるとおもってるんでしょ
私が真剣にやったものを適当と判断されるのは勝手ですが、
誰かの助けを借りるスレではないんですか?

ちょっと修正しましたが、やっぱり1と2しか出てきません。
preg_match('/(\d+)(?:,(\d+))+/', '>>1,3,10,2', $match);
0241nobodyさん2009/12/13(日) 20:25:41ID:???
もどっちゃったw
0242nobodyさん2009/12/13(日) 20:26:09ID:???
>>240

>>237
0243nobodyさん2009/12/13(日) 20:27:16ID:???
>>240
ちった学習しろ
>>229
0244nobodyさん2009/12/13(日) 20:27:15ID:???
真剣にやってるなら頂いたアドバイスを元に丸一日は考えてからここで聞くべきですね
あなたは他力本願なんですよ
0245nobodyさん2009/12/13(日) 20:29:05ID:???
まるで秀丸のeigodoo1みたいなやつだな
0246nobodyさん2009/12/13(日) 20:31:13ID:???
OK そこまで

OKwaveだ
02471962009/12/13(日) 20:31:58ID:iFkYaR3P
>>243
あなたも学習してください。
>>229では2>4みたいな意味不明なレスにもマッチします。
私のは下らない質問ですが、下らない回答はいいです。
0248nobodyさん2009/12/13(日) 20:32:03ID:???
yahoo知恵袋でもこういう態度でかい質問者は結構いるぜw
0249nobodyさん2009/12/13(日) 20:32:53ID:???
>>247
本質がわかってないようだな
たぶん永久に無理
0250nobodyさん2009/12/13(日) 20:33:37ID:???
>>247

>>237
0251nobodyさん2009/12/13(日) 20:36:02ID:???
>>247

229 名前:nobodyさん[sage] 投稿日:2009/12/13(日) 18:20:12 ID:???
>>277
君も頑固だねpreg_matchじゃダメっていってるのに

これ試験にでるお
0252nobodyさん2009/12/13(日) 20:36:23ID:???
>>247
下らない回答ばかりで申し訳ありませんでした
0253nobodyさん2009/12/13(日) 20:36:26ID:???
でねーよ
02541962009/12/13(日) 20:37:51ID:iFkYaR3P
>>250
見逃していました。
私が求めていたのはあくまでも2,4などの簡素なものですが、これで解決しそうです。
唯一の有効な回答をありがとうございました。
02551962009/12/13(日) 20:39:07ID:iFkYaR3P
ちなみにpreg_match()で解決できる方は上級プログラマだと判断します。
0256nobodyさん2009/12/13(日) 20:39:12ID:???
>>254
ご満足頂けたようでなによりです!
また居らしてくださいね!
0257nobodyさん2009/12/13(日) 20:41:29ID:???
なんでpreg_matchにこだわるんだろう
なにかallって言葉にコンプレックスでもありそうだなw
02582372009/12/13(日) 20:42:39ID:???
自分で言うのもなんですが
何でpreg_matchを使わないでpreg_match_allを使ったのかを勉強することをおすすめします
0259nobodyさん2009/12/13(日) 20:42:48ID:???
底辺くだ質質問者に上級認定されたかたがたおめでとうございます。
0260nobodyさん2009/12/13(日) 20:44:30ID:???
>>255
仰せの通りであります
我々もいつか上級プログラマになれるよう努力させて頂きます
02611962009/12/13(日) 20:51:19ID:iFkYaR3P
>>258
そもそも、私は複雑なレス指定を望んでいないわけですから>>を取り除くと2,4,6となりますよね?
それを2と4と6に分けるくらい、preg_match_all()でなくてもおそらくできるでしょうって訳です。

preg_match_all()の勝手なイメージとしてはたとえば
$body = <<<TEXT
>>2-4
>>4-6
>>6,9
TEXT;
のように本文中に複数現れるケースに使用することが好ましいと考えています。
単純な文字列分解ごときにallつける必要があるの勝手ことです。
0262nobodyさん2009/12/13(日) 20:53:39ID:???
>>261
そうでしたか
完全に勉強不足です。
本当にすみませんでした
0263nobodyさん2009/12/13(日) 20:59:02ID:???
そうだよね、関数は名前で機能を勝手に想像して使うものだし。
02642372009/12/13(日) 21:22:38ID:???
>>261
例えばなんですが
>>1
2
3
>>4

というように一行目に>>1で二行目はただの数字だけ・・みたいに検索対象の文字列が固定されてあればpreg_matchで可能です


ただ、>>196さんの残したレスを見る限りではそうではないように見えるのでpreg_matchは適さないんです。
>>227でpreg_match('/(\d+)(,|-|\d+){1,}/', '2,6,18,11', $match);と書いてあるのに
>>247で2>4のようなパターンも登場してます

レス指定にマッチするのは「頭に必ず>がきて(>+)、その後に数字(\d+)、その後にハイフンが来るかもしれない(\-?)、ハイフンが着たら番号が来るかもしれない(\d*)」となります

02651962009/12/13(日) 21:47:42ID:iFkYaR3P
>>264
私の説明不足です。

既に、レスを抜き出す処理は完成しています。
抜き出した数値を、パラメータとして渡すのですが、そこのバリデーションでの話です。

2>4は>>229のコードでは不完全だということを表すために提示しただけです。
これにはマッチしないでねーってことです。

あくまで欲しているのは>>2,4,9などから数値を抜き出せるコードで、
>>2-5などの指定にマッチする処理は、必要としていません。


分かりやすいように質問を変えますが、
2,4,6から数値を抜き出す表現を教えていただけますか?
数値は2,4,6,8のように増えることもありますし、2,4のように2つのみの場合もあります。
この場合においてもallなのでしょうか?

0266nobodyさん2009/12/13(日) 21:51:17ID:???
>>265
低級プログラマの回答で恐縮ですが、どう考えてもallです
0267nobodyさん2009/12/13(日) 22:03:27ID:???
>>265
allになんかうらみでもあるのかな?
0268nobodyさん2009/12/13(日) 22:07:36ID:???
>>255
>>255
>>255
02692372009/12/13(日) 22:18:01ID:???
>>265
preg_matchはマッチしたら処理が終わります
>>196さんが求める処理はpreg_match_allを使って繰り返し検索を行う必要がありのでpreg_matchでは無理です

>>2,4,9という感じで文字列が現れるルール
preg_matchで/>+(\d+),(\d),(\d)/という風に検索対象の文字列に合わせて正規表現パターンを書かないといけないです

でも2,>>4,9という文字列が現れるかもしれませんね
なので/>*(\d+),>*(\d),>*(\d)/という風に正規表現パターンを改良します


ただ、これまでの正規表現パターンでは>>2,3,4,2,>>4と文字列が長くなってくると対応できません
文字列の長さに合わせて正規表現パターンも書き直さないとだめなんですよ
preg_matchは最初にマッチした時点で処理が終了するのでしょうがないんです

なのでこのように文字列の長さが決まって無くてもいいようにマッチしても処理が終了しないようなことがしたいわけです
そこでpreg_match_allがでるんです

preg_match_allを使うことで>>2,3,4の時も>>2,3,4,5,6,>>2の時も対応できます
0270nobodyさん2009/12/13(日) 22:26:04ID:???
質問するときは1レスでこういう結果にしたい主を書いていただけたら、求めてる回答がもらいやすいと思います

質問することは恥ずかしいこととは思ってないので前向きに頑張ってください



>>2,4,9
の文字列から
正規表現で2,4,9を取得したい
と求める「結果」を最初に書いていただきたかったです

0271nobodyさん2009/12/13(日) 22:35:13ID:???
そんな質問の仕方じゃあ、/>>(\d),(\d),(\d)/ これで解決する

対象文字列がどういう範囲で変わるかぐらいは書かないと
02721962009/12/13(日) 22:41:04ID:iFkYaR3P
>>269
大変分かりやすかったです。
ただ、>>265の通りそのような単純ではないレス指定は想定していませんので、無視してください


最後にこの解説だけをお願いします。
なぜ、18が欠落するのでしょうか?
<?php
preg_match('/^(\d+)(?:,(\d+))+$/', '9,18,11', $match);
print_r($match);
//Array ( [0] => 9,18,11 [1] => 9 [2] => 11 )
0273nobodyさん2009/12/13(日) 22:52:06ID:???
>>272 それが自力で解決できたら質問者だと判断します。

とかな。
0274nobodyさん2009/12/13(日) 23:12:49ID:???
>>272
そらそうだ
0275nobodyさん2009/12/13(日) 23:18:21ID:???
>>272
こちらこそ大変面白かったです
また来てくださいね
0276nobodyさん2009/12/14(月) 01:02:33ID:???
正規表現ってスレ違いじゃないのか?
0277nobodyさん2009/12/14(月) 01:07:25ID:???
>>272
^(\d+) が 先頭からだから9
(?:,(\d))$ が 最後にマッチだから  ,11 にマッチだけど、非格納グループなので入らず
(\d++) の部分の 11 がマッチにはいると。
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
ここで、いろいろいじって遊ぶといいよ。
0278nobodyさん2009/12/14(月) 01:25:14ID:???
>>276 Pの書き方じゃなくて正規表現の書き方がわからないならスレ違い
0279nobodyさん2009/12/14(月) 01:28:18ID:???
>>こちらこそ大変面白かったです

吹いたわksg
0280nobodyさん2009/12/14(月) 02:14:08ID:???
これは酷い…ワロス
>>196はpreg_matchを一から勉強して理解しろ
あと単純な区切りを取得したいならmb_splitでも使っておけば?頭悪そう
0281nobodyさん2009/12/14(月) 07:06:50ID:h0EDfnnM
DOM関数に関する質問です。

<div id="hoge">
<div id="fuga">fugaの内容</div>
hogeの内容
</div>

このようなドキュメントから
hogeの内容の部分だけを取り出したいのですが、

$xpath = new DOMXpath($dom);
$results = $xpath->query(//div[@id="hoge"]);

var_dump($results->item(0)->nodeValue);

とすると、fugaの内容もふくまれてしまいます。
hogeの内容の部分だけを取り出すには、どうしたらよいでしょうか?

よろしくお願いします。
0282nobodyさん2009/12/14(月) 08:20:24ID:???
>>281
hogeはfugaを内包しているのだから正しい挙動。
「ドキュメント」の構造を見直しましょう。

「ドキュメント」の構造ママ、文字列「hogeの内容」を取り出したいってなら、旬のpreg_matchで。
0283nobodyさん2009/12/14(月) 10:21:08ID:???
>>277
この解説あってるの?
0284nobodyさん2009/12/14(月) 10:35:21ID:???
>>280
おまえの方がひどいし、頭悪い。
mb_splitでどうやってバリデートすんだよ
■ このスレッドは過去ログ倉庫に格納されています