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

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

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

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

◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】

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

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

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

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0797nobodyさん2010/05/21(金) 11:27:29ID:???
テンプレートエンジン使えばいいんじゃないの
かっこつけてMVCとか言うんじゃないのよ
0798nobodyさん2010/05/21(金) 11:43:37ID:???
/hogehoge/m とかmオプション使えば改行処理出来るんでない?
0799nobodyさん2010/05/21(金) 15:17:26ID:???
smarty乙
0800nobodyさん2010/05/22(土) 00:17:44ID:???
Smartyって糞遅いものだとばかり思ってたけど、生成されるコードの実行はかなり速くて驚いた。
まあ、機能が貧弱なのであまり使いたくはないが。
0801nobodyさん2010/05/22(土) 00:22:09ID:???
いくらでも拡張できるアレの機能が貧弱とはねぇ。
0802nobodyさん2010/05/22(土) 01:06:33ID:???
入力された文字にバイナリやHTMLで特殊な意味を持つ文字を適切に扱おうと次のような関数を考えました
しかしごく一部のバイナリがそのまま出力されるようです
どのようにしたら良いですか

function clean($str) {
$str = mb_convert_encoding($str,"UTF-8","UTF-8");
$str = preg_replace('/[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f]/','',$str);
$str = stripslashes(htmlspecialchars($str,ENT_QUOTES,"UTF-8"));
return $str;
}
0803nobodyさん2010/05/22(土) 15:06:24ID:XHChMTdn
勝手にUrlの後ろにに/(スラッシュ)が付くんですが、こういう設定ってPHPにあるんでしょうか?
0804nobodyさん2010/05/22(土) 15:19:16ID:???
勘違いですた
0805nobodyさん2010/05/22(土) 16:25:48ID:???
>801
何でもできるというなら、
 テンプレートの継承(またはレイアウトテンプレート)と
 文脈に応じた自動エスケープ機能と
 あとマトモなHTMLとしてプレビューできる構文
を寄越せ
0806nobodyさん2010/05/22(土) 16:30:19ID:???
Smartyの話を出すと荒れるから隔離してたのに
0807nobodyさん2010/05/22(土) 16:53:47ID:???
レイアウトテンプレートは実装した。というかすぐできるし誰でもやるんじゃないかなこれは。
文脈に応じたっていうのはちょっとしんどそう。他の具体例を挙げてもらえるかな。
まともなHTMLがほしければ整形ツールでも使えば?
0808nobodyさん2010/05/22(土) 19:24:40ID:???
PHPはライブラリ自体が案外重いんだよなぁ。
0809nobodyさん2010/05/23(日) 00:38:43ID:???
テンプレートの継承が.NETのユーザコントロールみたいなの指してるんだったら俺も作った。
違うならちょっとわかんね
0810nobodyさん2010/05/23(日) 00:40:46ID:???
って書いたけど、継承という言葉とまるで関係なかったorz
自分でやったことをいいたかっただけになってるな。

まぁ、smartyを指して貧弱だというのはphpの機能自体が貧弱だといっているのと同じだよね
0811nobodyさん2010/05/23(日) 16:43:09ID:8iYZevyz
PHPってシェルスクリプトとしても使えたりします?

RubyやPythonみたいに
0812nobodyさん2010/05/23(日) 16:46:18ID:???
もちろん
0813nobodyさん2010/05/23(日) 16:51:48ID:8iYZevyz
ども。
では例えば、
Dir.glob("*.txt").each {|x| File.remove(x)}
とかってPHPだとどうやって書きます?
0814nobodyさん2010/05/23(日) 16:57:20ID:???
PHPじゃ出来ないよ
0815nobodyさん2010/05/23(日) 16:57:48ID:???
できるだろw
0816nobodyさん2010/05/23(日) 17:20:08ID:???
>Dir.glob("*.txt").each {|x| File.remove(x)}
どういう意味かわからないけど、カレントディレクトリの.txtを消すでいいかな?

【hoge.php】
<?php
$list = scandir(getcwd());
foreach ($list as $value) {
if (preg_match("/\.txt$/", $value)) {
unlink($value);
}
}
?>

【コマンド】
php -f hoge.php
0817nobodyさん2010/05/23(日) 17:29:17ID:???
glob関数があるだろ・・・おまけに文字列探索するならまだしも正規表現て
0818nobodyさん2010/05/23(日) 17:29:31ID:8iYZevyz
>>816
コードありがとうございます
こちらが例示したコードの意味はその通りです
多少冗長になるものの可能そうですね
取っ掛かりにさせてもらいます、どうもです
0819nobodyさん2010/05/23(日) 17:30:38ID:8iYZevyz
>>817
そのままの関数があるんですね、どもです
08208162010/05/23(日) 17:31:15ID:???
文字列探索だけだと.txt.phpみたいのもかかるかとおもって正規表現にした
glob関数は知りませんでした
まぁ初心者に毛が生えた程度なので勘弁してくだしあ
0821nobodyさん2010/05/23(日) 17:41:08ID:???
末尾から4文字切り取れ
0822nobodyさん2010/05/23(日) 17:47:18ID:???
.txt.jpeg
0823nobodyさん2010/05/23(日) 17:49:22ID:???
とりあえず正規表現は叩くっていうのがどうもこのスレの流れらしいな
いい加減適材適所という言葉を覚えろや
0824nobodyさん2010/05/23(日) 17:51:03ID:???
>>822
だから何なんだ。.txtかどうかを調べたいんだろ。
0825nobodyさん2010/05/23(日) 17:55:11ID:???
何なんだって末尾から4文字とかいうからだろ。
jpegを例にしただけで、mimeがplain/textだとしても他にも、
C言語のc、Perlのpl、Rubyのrbなどplain/textの拡張子が3文字とは限らないわけで。
0826nobodyさん2010/05/23(日) 17:58:44ID:???
>>825
今回の場合は .txt のみを対象にしてるわけだから 4文字でいいじゃん
そういうのを屁理屈っていうんだよ
0827nobodyさん2010/05/23(日) 17:58:58ID:???
scandirでcontent-typeまで判別できるんすかwww
0828nobodyさん2010/05/23(日) 18:00:34ID:???
>>826
イミフ

>>827
こっちもイミフ
0829nobodyさん2010/05/23(日) 18:02:59ID:???
>>826
?

>>827
できるわけがない。
>>824のレスに対してのレスなので、
jpegっていったことに関して画像は関係ないだろといわれてると思ったので、
>>825のようなレスを返しただけ。
0830nobodyさん2010/05/23(日) 18:07:31ID:???
>>829
.txtって決め打ちされてるんだからその部分まで考慮する必要はまったくない
0831nobodyさん2010/05/23(日) 18:11:09ID:???
>>829
>jpegっていったことに関して画像は関係ないだろといわれてると思ったので、
これが間違いっす^^;
0832nobodyさん2010/05/23(日) 18:13:30ID:???
末尾から4文字っていうレスに対しての突っ込みなのは理解してるのかね?
質問主のやりたいこととは無関係な話なわけだが・・・
0833nobodyさん2010/05/23(日) 18:34:06ID:???
>>825は拡張子がtxtのものだけじゃなくてtext/plainのものが対象ってなんで勝手に飛躍してんの?
>>813のどこにそんなことが書いてあるの?
0834nobodyさん2010/05/23(日) 18:35:45ID:???
>>833
お前は流れを読んでからレスをしろ
0835nobodyさん2010/05/23(日) 18:42:54ID:???
>>832
拡張子がtxtのファイルを探したい
↓
正規表現で探す
↓
文字列探索でいいだろとつっこみが入る
↓
文字列探索だけだと.txt.phpみたいのもかかるかとおもって正規表現にした
↓
末尾から4文字切り取れ

これのどの辺がおかしいのかよく分からんのだが・・・。詳しく説明してくれないか。
0836nobodyさん2010/05/23(日) 18:52:38ID:???
>>835
回答者が想定しているケースは「みたいなもの」と言ってるように.txt.phpだけではないということ。
.txt.phpだけに限れば.txtになるが、.txt.cだったら.tになる。
よって4文字と文字数を限定するのは当てにならない。
0837nobodyさん2010/05/23(日) 18:55:47ID:???
Ruby の Dir.glob を例に出されてるんなら glob() や GlobIterator、
それか泥臭くとも>>816(正規表現式は間違ってるが)と答えるな
拡張子と質問者が明示して尋ねてるのなら末尾Nバイト比較でいいが今回は余計な一言だった
0838nobodyさん2010/05/23(日) 19:01:07ID:???
一言でいうと、考えてるベクトルが違うので話がかみ合ってない。
このスレではよくあること。
0839nobodyさん2010/05/23(日) 19:02:58ID:???
誰か>>836を日本語に訳してくれ
0840nobodyさん2010/05/23(日) 19:10:50ID:???
質問者のためにもならない回答者にケチつけるだけのやつは消えてくれればそれでいいよ
0841nobodyさん2010/05/23(日) 19:47:39ID:???
元凶は流れを見ないで場当たり的にレスするやつだな
>>824が全て悪い
あと文盲は発言しなくていいからROMってろ
0842nobodyさん2010/05/23(日) 20:09:35ID:PZlPEOvW
質問が来ると住人が喧嘩を始める
0843nobodyさん2010/05/23(日) 20:13:44ID:???
System::rm('*.txt')
0844nobodyさん2010/05/23(日) 20:45:23ID:???
>>824は末尾から四文字を比較しろって言ってるだけだろ?
まあ切り取ってという表現が誤解を招いたのかな。
もう少し柔軟に解釈しろよw
0845nobodyさん2010/05/23(日) 21:15:37ID:???
>>836=>>822の言ってることは滅茶苦茶なのに誰も指摘しないのはなんで?
0846nobodyさん2010/05/23(日) 21:19:50ID:???
>>845
質問ならID出してね
0847nobodyさん2010/05/23(日) 21:27:11ID:???
>>845
意味不明すぎて指摘していいのか困惑してる
0848nobodyさん2010/05/23(日) 21:51:40ID:???
何が滅茶苦茶なのか言ってみ
0849nobodyさん2010/05/23(日) 21:54:34ID:???
>>836
切り取っての意味勘違いしてないか?
4文字切り取って".txt"かどうか比較しろってことだろ
0850nobodyさん2010/05/23(日) 22:01:48ID:???
>>844
>>>824は末尾から四文字を比較しろって言ってるだけだろ?
いいえ違います
ちゃんと流れを読んで下さい

>>816で文字列探索に正規表現なんて必要ない→

.txtという文字列があったら削除だと.txt.phpでも削除されてしまう
だから正規表現で.txtで終わるにすればいい→

それでも正規表現を使わずに末尾から4文字(.phpの部分)を切り取ればいい→

それだとtext.jpegとか.xxxが4文字でない場合はどうするの?→

以下流れを読まないやつのレスで話が異次元へ


こういう流れ
0851nobodyさん2010/05/23(日) 22:05:09ID:WeyQqAH3
>>850
真正すぎて見てられないわ
なんで >>836 で拡張子が php であるはずの .txt.php を末尾4文字を除去して txt として評価してんの?馬鹿じゃねーの?

if (substr($filename, -4) == '.txt') unlink($filename);

こうするだけだというのに何言ってんだか

0852nobodyさん2010/05/23(日) 22:08:32ID:???
>>850を叩く流れでおk?
0853nobodyさん2010/05/23(日) 22:10:38ID:???
>>851
お前が勝手にそう解釈してるだけなの
>>821のレスの真意は>>850
0854nobodyさん2010/05/23(日) 22:13:15ID:???
>>850
任意の拡張子に応用する場合のことを言ってるの?だとしても任意の拡張子の文字数数えればいいだろ。馬鹿じゃねーの?
0855nobodyさん2010/05/23(日) 22:13:57ID:???
結論:みんな馬鹿
0856nobodyさん2010/05/23(日) 22:14:03ID:???
>>853
>>821は俺だけど真意は4文字切り取って".txt"かどうか比較しろってことだよ。
0857nobodyさん2010/05/23(日) 22:14:51ID:???
>>853
勝手に解釈してるのはお前だけだよwwww
0858nobodyさん2010/05/23(日) 22:14:56ID:???
いつまでもグダグダすんのやめよーぜ。
0859nobodyさん2010/05/23(日) 22:15:50ID:???
>>850
みんな間違ったこと言ってないだろ。
要するに正規表現使っても、末尾で比較しても同じこと。
拡張子判定のロジックの例を言ってるだけだ。

例として末尾四文字の比較を上げてるだけで、終端最初のピリオドを調べて切り出し比較してもいいし、pathinfo使ってもいい。
正規表現使うより末尾で比較した方が処理としては速いからそっちを進めてるだけでしょうが。

お前の理屈なら>>816の正規表現でtext.jpegの拡張子で.txt判定出来るの?って言ってることと同じ。
0860nobodyさん2010/05/23(日) 22:16:08ID:???
>>854
動的にカウントするぐらいなら最初から正規表現でいいやん。
これって結局正規表現アレルギーがまた暴れてるんでしょ?
0861nobodyさん2010/05/23(日) 22:17:55ID:???
>>860
例えばどんな正規表現?
0862nobodyさん2010/05/23(日) 22:20:53ID:???
>>861
>>816のやつ。
わざわざ拡張子判定のためにそんな処理いれるなら、正規表現でおk。
0863nobodyさん2010/05/23(日) 22:26:49ID:???
>>862
なんで文字探索より正規表現のほうがいいの?
0864nobodyさん2010/05/23(日) 22:38:06ID:???
ただ正規表現使ってドヤ顔されてもな。
正規表現が万能とでも思ってるのか?
0865nobodyさん2010/05/23(日) 22:40:01ID:???
まとめ

.txtが文字列に入ったら消したい(>>813)→
.txt.phpを想定して.txtで終わるように正規表現で変えてみました(>>816)→
.txtで終了するの探すのに正規表現なんていらんよ(>>817 >>821)→
>>821-822間で勘違い発生→
以下考えてることがバラバラでgdgd

結論:>>824が喧嘩腰ではなく懇切丁寧にうまく勘違いを訂正できればよかったのだが
勘違いしてる相手には異次元にしか聞こえかった
0866nobodyさん2010/05/23(日) 22:43:00ID:???
>>865
813の書き方でも末尾が.txtのファイルしか引っかからないと思うが
0867nobodyさん2010/05/23(日) 22:44:49ID:???
ワイルドカードも知らん人いるのね
0868nobodyさん2010/05/23(日) 22:46:54ID:???
>>865
お前勘違い君だろ。
0869nobodyさん2010/05/23(日) 22:47:30ID:???
>>866
すまん
そのようだな

まぁ今回改めて分かったのは正規表現の文字が出るとなぜかこうなるなw
0870nobodyさん2010/05/23(日) 22:47:55ID:???
このスレでさっきから必死なのは勘違い君だけ。
0871nobodyさん2010/05/23(日) 22:49:15ID:???
816=勘違い君=865でしょ
0872nobodyさん2010/05/23(日) 22:50:16ID:???
見苦しいからいらんレスつけるな
お前らも同類
0873nobodyさん2010/05/23(日) 22:52:32ID:???
見苦しいのはお前だよw
0874nobodyさん2010/05/23(日) 22:52:37ID:???
お前もな
0875nobodyさん2010/05/23(日) 22:52:58ID:???
=で結ぶやつが一番ウザイわ
0876nobodyさん2010/05/23(日) 22:55:45ID:???
なんで正規表現使うと「わざわざ」とか「そこで正規表現はありえない」とかよく言われるの?
複雑だから?速度面で?
0877nobodyさん2010/05/23(日) 22:56:07ID:???
この慌てっぷりが全部図星だったことを物語ってるなw
0878nobodyさん2010/05/23(日) 23:05:50ID:???
今北
すごいやつがいたんだなwww
0879nobodyさん2010/05/23(日) 23:08:56ID:???
1万回でチェックだけやってみたけど 0.01095秒と 0.00551秒だったわ。 さして変わらんとするか、倍近く違うとするかは人しだい。
0880nobodyさん2010/05/23(日) 23:11:09ID:???
>>844=>>857=>>869=>>873=>>877=>>878

終わったのにいつまでもやってんじゃねえよ
wwwwwwwwwwwwwwwwwwwwwwww
0881nobodyさん2010/05/23(日) 23:17:24ID:???
>>879
ありがとう。
こっちも一応速度テストは>>816と>>851とおまけでglob使うのでしてみた。

>>816が0.0009x
>>851が0.0006x
globが0.001x

結果は、
>>851 > >>816 > glob

globって遅いんだね。

やっぱ速度差なのかな?1/10000秒単位だから、もっと他に理由があると思ったんだけど。
08828782010/05/23(日) 23:20:23ID:???
>>880
今北って言ってんのにこれだよwwww
混ぜてくれてありがとうな
0883nobodyさん2010/05/23(日) 23:21:09ID:???
>>881
つsystem('rm -f *.txt');
0884nobodyさん2010/05/23(日) 23:21:40ID:???
>>881
正規表現は書き方と対象文字列の長さによって大きく速度が変わるよ。
あと、>>851は
strrchr($v, '.') == '.txt'
こうすりゃもっと簡単で柔軟。
0885nobodyさん2010/05/23(日) 23:22:23ID:???
もめてる内容とは違うだろうから指摘しておくと、
ディレクトリ名がhoge.txtの場合を考えないとだめなんでないの
0886nobodyさん2010/05/23(日) 23:24:21ID:???
>正規表現は書き方と対象文字列の長さによって大きく速度が変わるよ。

いいこと聞いた。今度試してみよう。
08878852010/05/23(日) 23:30:01ID:???
ごめん。もとのコードがそれ考慮してないから必要なかった
0888nobodyさん2010/05/24(月) 00:06:24ID:DmnGs3M4
$tes = array();
for($i=4;$i<21;$i++){
$key = $i-4;
array_push($tes,$key=>$row[i]);
}
array_pushで$aに連想配列で値を追加していきたいですが、エラーに成ってしまいます。
正しい書き方はどんな感じでしょうか?ちなみに、$row,$keyはintです。
0889nobodyさん2010/05/24(月) 00:11:39ID:???
array()
0890nobodyさん2010/05/24(月) 00:12:00ID:???
こうしたいのかな?
array_push($tes, array( $key => $row[i] ) );
それともこっち?
$tes[$key] = $row[i] ;
0891nobodyさん2010/05/24(月) 00:25:59ID:???
>>890
print_rすると、
0=>11,1=>21,2=>5,・・・・
となって欲しいのですが、どうなのでしょうか?
0892nobodyさん2010/05/24(月) 00:51:39ID:???
$rowは何?
0893nobodyさん2010/05/24(月) 00:53:00ID:???
$row = array(11, 21, 5....)ってかんじ?
なら>>890のでできるはずだけど

$tes = array();
for($i=4;$i<21;$i++){
$key = $i-4;
$tes[$key] = $row[$i];
}
print_r($tes);
0894nobodyさん2010/05/24(月) 01:15:26ID:???
あー、すいません。
$rowはpearのDBからの取得です。

$tes = array();
$row = $res->fetchRow();
for($i=4;$i<21;$i++){
$key = $i-4;
$tes[$key] = $row[i];
}

みたいにやってみたんですが、$rowの値が$tes入ってないようです><
お手数おかけして申し訳ないです。
0895nobodyさん2010/05/24(月) 01:19:37ID:???
>>894
$tes[$key] = $row[i];
$tes[$key] = $row[$i];

どこが違うかよく見てみ
0896nobodyさん2010/05/24(月) 01:21:28ID:???
おう・・・・
スレ汚し申し訳けありませんでした。
解答ありがとうございました
■ このスレッドは過去ログ倉庫に格納されています