【PHP】下らねぇ質問はID出して書き込みやがれ 78
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/12/23(火) 19:08:55ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 76
http://pc11.2ch.net/test/read.cgi/php/1226517332/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
015983
2008/12/25(木) 15:30:11ID:2wMGCLSI有り難う御座います。正確に動作しています。
こういう方法は思いつきもしませんでした。
>>158
ArrayObjectを使用したことがないのでちょっとあれなんですが、
上記のコードよりも簡単に>>153を実装できるのでしょうか?
宜しければサンプルコードを教えて下さい。
0160nobodyさん
2008/12/25(木) 15:41:03ID:???>>153みたいな実装はしないってことなんだけどね。
a,b,cに意味を持たせる必要があるわけでしょ。
それだったら、
$quickTime
->getBlock(2)
->getMoov("main")
->getTrack("hoge");
みたいに、それぞれの階層に合わせたオブジェクトを作成して、
メソッドで順次取得するっていう話。
んで、ArrayObjectを使えばショートカット的に配列で処理できる。
$quickTime[1]["main"]["hoge"]で、参照を取得できるから、
値のセットもゲットも普通に実装出来るしね。
まぁ、offsetSetの時に一工夫は必要だけど。
ただ、簡単に実装というのは人によって意味が違うから何とも言えん。
わかりやすいかどうかは主観の問題だからね。
0161nobodyさん
2008/12/25(木) 15:44:18ID:???016283
2008/12/25(木) 16:10:25ID:2wMGCLSI現状でパース後の配列は
$quickTime[1]["main"]["hoge"] = $data;
のようになっています。
$arr = array(1, 'main', 'hoge');
から
$quickTime[1]["main"]["hoge"]
にどうsetやgetが簡単にできるかっていうので悩んでいます。
わかりやすいというよりかは直感的な操作が目的です。
確かにそのように関数作るのも良いのですが、ツリー型で出来れば記録したいところです。
ただAtomってのはややこしいんですが、同一断層に同じ名前のAtomが出てくることもあるので、
そこら辺の条件分岐をやってるとどうしても複雑になってきます。
XMLに似てる感じです。
>>161
結局内部ではarrayとして扱われるのでそれをどう処理するかがミソです。
0163nobodyさん
2008/12/25(木) 17:28:45ID:???foreach + 参照渡しを使えばいいよ
$tree = array('a' => array('b' => array('c' => 'C')));
$indexes = array('a', 'b', 'c');
$node =& $tree;
foreach ($indexes as $index) {
$node =& $node[$index];
}
echo 'node: ', var_export($node, true), PHP_EOL;
echo 'tree before: ', var_export($tree, true), PHP_EOL;
$node = array('new' => 'value');
echo 'tree after: ', var_export($tree, true), PHP_EOL;
注意点は $value =& $array[$key] が実行された際にキー $key が存在しない場合
無言で配列に要素が作られてしまう事
これはPHPのアンドキュメントな動作なので
嫌なら array_key_exists() でチェックしてね
0164nobodyさん
2008/12/25(木) 19:23:56ID:???$indexes = array_keys($tree);
でいいな
0166nobodyさん
2008/12/25(木) 19:49:40ID:???それは質問の答えになってないんじゃない?
新しいノードを追加じゃなくて、cにarrayが追加になってるよね。
c=>'C'の'C'を書き変えたいわけでしょ
0167nobodyさん
2008/12/25(木) 19:52:41ID:???foreachで回すならarray_reverseしてもいいけど。
ノードを扱うならappendなのかsetなのかgetなのかが明白な
IteratorってのがFAだとは思うが。
0169nobodyさん
2008/12/25(木) 20:27:42ID:???FlexからArray型の配列やByteArray型の配列をPHPに渡したいんですが、
PHP側ではObjectとして認識されます。これは、どうやったら
中身を取り出す事ができるんでしょうか?
0170nobodyさん
2008/12/25(木) 20:36:02ID:???もっとも単純なのは、get_object_vars かな。
取得したObjectを調べればいいと考えれば、
ReflectionObject::export($obj);
で、プロパティやメソッドをチェックしてそれを使う。
017183@規制
2008/12/25(木) 20:40:17ID:gzkDkyEFgetはforeachぶん回しした後でissetでキーを確認すれば良いんで簡単なんですが
setは書き換えが何度もあるので>>157のを元にちょっと面倒ですが書き換えだけの関数を作りました。
ただ>>163のような参照っていう手もありますね。
>>168
Array/ArrayObjectの違いってなんなんでしょうか?
JavaのString/StringBufferみたいに書き換えメインなら後者使えって感じですか?
0172nobodyさん
2008/12/25(木) 21:06:26ID:???168?? ま、いいけど。
だいたい、そんな感じだけど、書き換えメインだからってわけじゃない。
あんまり気にしなくていいよ。質問スレなのに語ってしまってスマソ。
0173nobodyさん
2008/12/25(木) 21:30:25ID:???>>171
Javaで言うプリミティブ型と参照型の違い、
bool 型と Boolean クラスの違いと考えて欲しい
0174nobodyさん
2008/12/25(木) 22:44:06ID:???> Javaで言うプリミティブ型と参照型の違い
それは、そうなんだけどね。
「だいたい、そんな感じ」っていう程度の答えで収めちゃいかんかね・・・
0175nobodyさん
2008/12/26(金) 09:10:34ID:???0176nobodyさん
2008/12/26(金) 09:11:08ID:???『ちゃんと動いているから、あとは使う人が分かってくれる
だろう』と、考えをストップするところがあった。本当は、動
いたものを説明して分かってもらい、使ってもらうところま
で来てやっと完成なのに
0177nobodyさん
2008/12/26(金) 09:31:34ID:YvHk/8hRfopenをブロックしているのか?
それとも、fgetでの読み取りをブロックしているのか?
0178nobodyさん
2008/12/26(金) 09:35:59ID:???0180nobodyさん
2008/12/26(金) 09:48:29ID:???0181nobodyさん
2008/12/26(金) 09:51:47ID:???0182nobodyさん
2008/12/26(金) 09:53:25ID:YvHk/8hR0183nobodyさん
2008/12/26(金) 09:54:11ID:YvHk/8hRそれとも、fopenは自由で、
そのあとにfgetでファイルの内容を読み取ろうとしたときに
ブロックするのか?
0185nobodyさん
2008/12/26(金) 10:03:30ID:YvHk/8hR(fopen()へ引数"w"または"w+"を指定して)書き込
みモードでオープンすることにより丸めるファイルに
アクセス保護する 特別なロックファイルを使用する
必要があるかもしれません。
↑この日本語意味わかんねーんだけど?
0186nobodyさん
2008/12/26(金) 10:03:31ID:???せめて、flockしたがfopenではじかれないけどなぜ?ぐらいにしろよ
それでもダメダメだが・・
"ファイルロックとは"って、汎用的な質問ありえんw
荒しだぞそれ。
0188nobodyさん
2008/12/26(金) 10:04:38ID:YvHk/8hRキモヲタはちゃんと日本語しゃべれよ
0190nobodyさん
2008/12/26(金) 10:08:10ID:YvHk/8hRそう、そういう明快で簡潔な回答がほしかった
ありがとう、ありがとう
次からもよろしくおねがい
0191nobodyさん
2008/12/26(金) 10:09:08ID:YvHk/8hR共有ロックってなんの意味があるの?
0194nobodyさん
2008/12/26(金) 10:10:54ID:???0195nobodyさん
2008/12/26(金) 10:13:00ID:???0196nobodyさん
2008/12/26(金) 11:24:10ID:YvHk/8hRこのページおもろい
0197nobodyさん
2008/12/26(金) 11:30:57ID:???は多数存在します。本来カウンタで同じ数字が2つ
出てきたり、数字が出てこなかったりしたらとんでも
ないことです。「OSとロックの仕様の限界でしょうが
ないんですよ」という名言を聞いたことがありますが
、そんな人に会員番号の発行プログラムとか、コン
サートチケットや座席番号発行とかのアクセスが集
中する業務プログラムを委託しちゃったら怖すぎま
す。
0198nobodyさん
2008/12/26(金) 11:52:45ID:???分が処理をしている間はずーっとファイルは
開きっぱなしで自分以外の誰にも触らせな
い」のが、データを守るためには最も安全な
のです。
「データファイルが大きくなるほど、データが
飛ぶ可能性が飛躍的に高まります」とか「こ
まめにファイルを閉じることでデータが飛ぶ
危険を最小限にしています」とか言っている
人のCGIは信用しないようにしましょう。2回
もファイルを開いたり閉じたりすると、その間
に何が起こってるか分からない、怖い! …
そういう感覚が自然に沸くようになるとOKで
す。一旦理解すれば、簡単なことですよね?
0199nobodyさん
2008/12/26(金) 11:55:17ID:???0200nobodyさん
2008/12/26(金) 12:15:28ID:???紹介時にはID出すのに
コピペするときだけID隠すとか細かい芸はしなくてよろしい
さっさとトリップつけてくれ
俺の視界から消し去ってやるから
0201nobodyさん
2008/12/26(金) 12:24:09ID:???できるプログラマーって何を聞いても親切に教えてくれるよな。
できないプログラマーってひたすら人をバカにしたがるよな。
なんなんだろうなこの違い。やっぱり謙虚さが大事なのかな。
0202nobodyさん
2008/12/26(金) 12:41:22ID:???「この娘、ブスでしょ?」
0203nobodyさん
2008/12/26(金) 12:42:08ID:???それがわからないなら死ねばいい
0204nobodyさん
2008/12/26(金) 12:43:20ID:???http://pc11.2ch.net/test/read.cgi/php/1158647441/
いつもの質問の人はこっちに移動してくれい
0205nobodyさん
2008/12/26(金) 12:44:14ID:???ずいぶん、浮世離れしたページだと思ったら、20世紀のサイトじゃないか。
掲示板がスパム満載になってて、マルウエア放置w
それで基本的なことを、勘違い付きでエラそうなこと書いてんなよなww
0206nobodyさん
2008/12/26(金) 12:46:03ID:YvHk/8hR2.読み込む
3.一時データファイルに書き込む
4.一時データファイルを正規ファイル名にリネームする
5.ロック解除する
これってしないとダメなの?
0208nobodyさん
2008/12/26(金) 12:55:00ID:???c、 `っ( ヽ
( v)c、 `っ
V''V ( v) / ̄`⊃
V''V | ⊃
( v) ハ,,ハ
V''V ( ゚ω゚ )
⊂ ⊃
> )
(/(/
ハ ,,ハ
( ゚ω゚ ) お断りします
/ \
((⊂ ) ノ\.つ))
(_⌒ヽ
ヽ ヘ }
ε≡Ξ ノノ `J
0209nobodyさん
2008/12/26(金) 13:01:50ID:???>>1は守ってください
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
0211nobodyさん
2008/12/26(金) 13:07:12ID:???一切シカトでよろしく
たまにID伏せるが特徴あるので分かるだろう
0212nobodyさん
2008/12/26(金) 13:07:46ID:Ag3DX8xC【OS名】centos5 linux
【PHPのバージョン】php5.26
【質問内容】
PHPをテンプレートエンジンとして使用するとき
<?php if($foo): ?>
<div>fooだよ</div>
<?php endif ?>
こんな風にかけるじゃないですか?
多分{}を使うブロック構文はこの書き方がいけそうな気がするんですが
switchもいけるのでしょうか?いまいち書き方がわからない。
たしか公式マニュアルでこの書き方の解説が書いてあるところを見た気がするんですが
探しても見つかりません。URL知っていたら教えてください。
お願いいたします。
0213nobodyさん
2008/12/26(金) 13:09:10ID:???移動しないというなら話は早い
一切シカトでよろしく
たまにID伏せるが特徴あるので分かるだろう
0214212
2008/12/26(金) 13:11:36ID:Ag3DX8xCすいません。いきなり見つけました。
switchもいけるっぽいですね
試してみます。
0215nobodyさん
2008/12/26(金) 13:25:18ID:YvHk/8hRとよく書いてあるが、もしかして、カプセル化しないと
すべてのサブルーチンは自動的に全部
グローバル化してしまうの?
0216nobodyさん
2008/12/26(金) 13:31:40ID:???0217212
2008/12/26(金) 13:33:35ID:Ag3DX8xC<?php case 'a': ?>
<div>aだよ</div>
<?php break; ?>
<?php endswitch ?>
だめみたいですね
下は動きました。
<?php
switch($foo):
case 'a':
echo 'aだよ';
break;
endswitch;
?>
上の方が書けたら便利なのになあ。書き方がまずいのか、それとも不可能なのでしょうか?
>>215
カプセル化ってもっと抽象的な意味じゃないのかな?
例えば部下にレポートを書くように命令するんだけど、
その部下がどうやって調べたとか、レポートを何のソフトで入力したとか、そういう詳しいやり方は一切関知しないけど、
欲しいレポートだけは確実に手に入る
こんな感じだと思ってるけど。
0218nobodyさん
2008/12/26(金) 13:38:05ID:???0219nobodyさん
2008/12/26(金) 13:42:02ID:???0220nobodyさん
2008/12/26(金) 13:44:39ID:???0221nobodyさん
2008/12/26(金) 13:47:27ID:???htmlモードで<div>aだよ</div>
ここの部分は出力されてるわけで
phpモードでの条件文に関係なくここは必ず表示されてしまう
条件文によって表示させたいのなら
phpモード内でやらないとだめだろう
0225nobodyさん
2008/12/26(金) 14:01:11ID:???質問者じゃないんなら、余計な御世話だろ
でなけりゃ、自作自演
>>221
[だめみたいですね]じゃなくて、
エラーがでるのか、
期待した動作と違うなら、期待した動作はなんなのか、
ちゃんと、>>1をよく読んで質問してください。
そうすれば、答えが貰える。ちうか自然に答えに辿り着く。
0227nobodyさん
2008/12/26(金) 14:04:07ID:???<?php switch() {
0228nobodyさん
2008/12/26(金) 14:04:47ID:???まぁいいや
しかしPHPは気持ち悪い言語だな
0230nobodyさん
2008/12/26(金) 14:09:49ID:???0231nobodyさん
2008/12/26(金) 14:10:08ID:???0233nobodyさん
2008/12/26(金) 14:18:30ID:???0234nobodyさん
2008/12/26(金) 14:29:35ID:Mk7Gnz+aテキストファイルを指定されたフォーマットに基づき、
行毎に取り出したいプログラムを作ろうとしています。
(任意のアクセスログの解析プログラムです)
フォーマット自体の Syntax はまだ未定なんですが、
今後取り出したい項目が増えることを想定しています。
例えば、以下のようなフォーマットだった場合。
$format = '%{ip} %{host}';
テキストファイル(アクセスログファイル)の各行とマッチングをし、
「127.0.0.1 example.com」という行があれば、
$data[0]['ip'] = '127.0.0.1'
$data[0]['host'] = 'example.com'
という形でデータを取り出したいです。
こういった場合、どういったロジックで書けば良いのでしょうか。。。
というか、こんなことは結構良くありそうなので、
PEAR でライブラリを探してみましたがそれらしきものはありませんでした。
ライブラリがあれば理想ですが、ご存じでしたら教えて下さい。
よろしくおねがいします。
0235234
2008/12/26(金) 14:33:44ID:Mk7Gnz+a指定フォーマットが可変なのが今回の目標です。
上述例であれば、半角スペースで explode() すればよいのはもちろん分かるんですが、
例えば、
$format = '%{ip}<>%{host}' となったり、 (KENT式)
$format = '%{ip} "%{host}"' になるかもしれない、ということです。
動的に正規表現を無理矢理作るようなイメージなのでしょうか…。
同じイメージとしては、
AWStats でのログのフォーマットを指定出来るところ、あれのイメージです。
よろしくおねがいします。。。
0237212
2008/12/26(金) 14:48:00ID:Ag3DX8xCすいません。出たエラーはこんな感じです。
Parse error: syntax error, unexpected T_INLINE_HTML, expecting T_ENDSWITCH or T_CASE or T_DEFAULT
下のようにしたら実現できました。
<?php switch($foo):
case 'a':
?>
<div>a</div>
<?php break; ?>
<?php case 'b': ?>
<div>b</div>
<?php break; ?>
<?php endswitch ?>
気持ち悪いですね。
最初のcase句を別の<?php?>に入れるとエラーが出ます。
う〜ん・・・気持ち悪い。使っていいものか悩みますね。バグでした〜とかいって修正されそうな気も。
0238nobodyさん
2008/12/26(金) 14:56:52ID:???日本語としては「じっぷん」が正しいが、レッドブックの「とおふん」も間違いではない
ただ朝鮮人や関西人が良く使う「じゅっぷん」は明らかに間違い
これを使っていると日本人である事を疑われるので気を付けるように
0240nobodyさん
2008/12/26(金) 15:11:02ID:???俺のデバッグ環境だと普通にできるが・・・
<?php $a = 3; ?>
<?php switch($a): ?>
<?php case 1: ?>
1
<?php break; ?>
<?php case 2: ?>
2
<?php break; ?>
<?php default: ?>
default
<?php endswitch; ?>
0241nobodyさん
2008/12/26(金) 15:16:56ID:???explodeは、よくてpreg_matchも理解してるんだよね。
あとは状況応じてパターンを変えればいいんでない?
0246nobodyさん
2008/12/26(金) 15:25:20ID:???いつも
<div><?php if () { echo ""; } else { echo ""; } ?></div>
みたいな感じでやってたわ
0247nobodyさん
2008/12/26(金) 15:25:44ID:Mk7Gnz+aはい、理解しています。
今回の例であれば、%{hoge}の部分を(.+)にして正規表現を作り、
preg_matchの3番目の引数$matchesを使って、
%{hoge}が1番目なら$data[0]['hoge'] = $matches[1]すれば良いですよね。。。
ただ、もっとこう、sscanf 的な感じで簡単な仕組みで出来たりしないかなぁ、とか
一般的にはどうやっているんだろう的な意味合いも込めて質問させていただきました。
どなたかスマートな方法や、ライブラリがあればご教示ください。
0251nobodyさん
2008/12/26(金) 15:41:03ID:???sscanf使えば?
>>246
smartyは独自タグをああいう形に変更してくれるが
あれは記述方法の1つであってテンプレートではない
0252nobodyさん
2008/12/26(金) 15:41:21ID:i1+5wuDM0254234
2008/12/26(金) 15:43:41ID:???あ、すみません、すこし私の文章の字掛かりが悪かったですね。
取り出す単位が行毎というだけで、行毎にフォーマットが違う訳ではないです。
というか、そもそも行とかそういう説明がいらないですね、ごめんなさい。
あくまで1文字列集団に対して指定のフォーマットで取り出したいだけの質問です。
>>250
スマートって定義が曖昧ですね、申し訳ない。
そんな汎用ライブラリ無いですか、と受け取って下さい。
自分でコードを書きたくないのです。怠惰です。開き直りです。。。
0255252
2008/12/26(金) 15:46:29ID:i1+5wuDMありがとうございます。
ご意見を伺いたいのですが、20件〜30件程度のデータをSQLから引き出して、<select>をループで
生成するというのはやはり、負荷がかかってしまいますか?
(<select>は複数あるとします)。
データが変わるたびに、対応してHTML部分も書き換えるのが面倒なので考えたのですが……。
0256nobodyさん
2008/12/26(金) 15:47:41ID:???>あくまで1文字列集団に対して指定のフォーマットで取り出したいだけの質問です。
だったらsscanfでいいじゃん。
連想配列に入れたいなら自分でsscanf使ってパーサー作る感じで
>>255
全然かからない
0257252
2008/12/26(金) 15:51:16ID:i1+5wuDMありがとうございました。
0258nobodyさん
2008/12/26(金) 16:25:35ID:nmEdMuVH何か方法はありますか?
またphpの標準関数はphp以外の言語で実装されているのでしょうか?
return値が異なる関数が(成功したらintやStringを返し失敗したらbool(false)を返すなど)
いくつかあるので中身がどのように実装されてるのか知りたいです
■ このスレッドは過去ログ倉庫に格納されています