【PHP】下らねぇ質問はID出して書き込みやがれ 114
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2012/01/02(月) 02:03:25.50ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 113
http://kohada.2ch.net/test/read.cgi/php/1322564127/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0196nobodyさん
2012/01/05(木) 01:07:57.28ID:YvCiXMC9ケースバイケースになるくらい難しいことですか?
0197nobodyさん
2012/01/05(木) 01:10:10.17ID:YvCiXMC90198nobodyさん
2012/01/05(木) 01:16:29.08ID:YvCiXMC9他のサーバーサイド言語では主に3つのスコープがあります。
1.リクエスト
2.セッション
3.アプリケーション
私見だとPHPには1,2相当はありますが3がないので困っているのです。
どうしたらよろしいでしょうか?3がないとすると大幅にパフォーマンスが
変わりかねないので悩んでいるのです。
0199nobodyさん
2012/01/05(木) 01:20:01.65ID:???>大幅にパフォーマンスが 変わりかねないので悩んでいるのです。
ほう、それは具体的にどういうケースでパフォーマンスの低下が発生するの?
実装次第で回避出来るかもしれんよ。
0200nobodyさん
2012/01/05(木) 01:25:30.10ID:YvCiXMC9サイトへアクセスする全員が利用するデータがDBにあります。
0203nobodyさん
2012/01/05(木) 01:29:24.23ID:YvCiXMC9たとえば一定期間に1000人がアクセスしたとします。
最低1000回DBへのアクセスが発生します。
データは共通なのだから本来であればDBへのアクセスは1回で
よいはずです。
0204nobodyさん
2012/01/05(木) 01:32:17.91ID:YvCiXMC9基本的にPHPは重いしサーバーのメモリを食うのでできる限り
使用したくないのです。
そこで、jsonなどの静的ファイルに置き換えてjsで読むという方法は
取っていますが、結局サーバーサイドとクライアントサイドで書く必要
があるのでめんどくさいのです。
0207nobodyさん
2012/01/05(木) 01:35:26.23ID:???0208nobodyさん
2012/01/05(木) 01:42:34.82ID:YvCiXMC9使う側の利便性を考えるとやはりDBです。
やっぱり方法は無いんでしょうね。
memcachedと使うという手法は知っていますが、
PHPの仕組み上ではどうしてもサーバーに負荷がかかってしまう。
アプリケーションスコープがある言語にどうにかして切り替えます。
ありがとうございました。
0209nobodyさん
2012/01/05(木) 02:35:16.36ID:???0211nobodyさん
2012/01/05(木) 03:05:43.15ID:???悪いけど究極的にウンコみたいな設計だな。
根本的におかしい。
どうやったらそんな謎設計になってしまうのか詳しく聞きたい。
0215nobodyさん
2012/01/05(木) 03:23:45.71ID:???0218nobodyさん
2012/01/05(木) 03:25:37.26ID:???そうあわてんなって。
こんなウンコみたいな設計で動いてるサイトの詳細ってお前らも知りたくないか?
本人が来たら詳しく聞いてみようぜ。
0223nobodyさん
2012/01/05(木) 03:33:34.93ID:???レベル低すぎ。
0224nobodyさん
2012/01/05(木) 03:38:42.21ID:???「PHPはおかしなコードを助長する言語」
同意だよね。ヒヒヒwwww。
0228nobodyさん
2012/01/05(木) 03:46:05.91ID:???あらあらなるほど
ちゃっちゃと作る分にはPHPは楽だからな。
人が集まった時点で作り直せばよかったんだろうけどなぁ。
0229nobodyさん
2012/01/05(木) 03:47:09.77ID:???無知ですまんかった。
0230nobodyさん
2012/01/05(木) 03:50:18.84ID:???そんなわけがわからないものを作るよりは
初めからC++で作っとけば良かったんだ。
HipHopにしてもネイティブのC++に比べると
オーバヘッドがあるわけでムダだよね。
0232nobodyさん
2012/01/05(木) 03:58:28.05ID:???C++で作ったからといって、1000ユニークアクセスに対して1000DBアクセスが発生しなくなるわけじゃあないからな。
なんの工夫もなしにそれは変わることはない
0233nobodyさん
2012/01/05(木) 04:44:02.06ID:???0234nobodyさん
2012/01/05(木) 04:50:42.28ID:???HipHopはPHPの開発ツールとしての優位性が強まる、つまり「PHP最強だろ!」って話だからね
PHP憎しで完全に狂ってるけど、はたから見ると面白い
0235nobodyさん
2012/01/05(木) 08:46:23.61ID:???もういいから早く代替案を答えて。
0236nobodyさん
2012/01/05(木) 08:57:14.69ID:???C++で作ったからといって、1000ユニークアクセスに対して1000DBアクセスが発生しなくなるわけじゃあないのに、
なぜHipHopで「PHP最強だろ!」になるのですか?
0238nobodyさん
2012/01/05(木) 09:14:31.17ID:???よく死にたくならないなと感心するよ
0240nobodyさん
2012/01/05(木) 11:42:14.54ID:ACIe1UJA0241nobodyさん
2012/01/05(木) 11:48:53.94ID:???じゃなければmyTrim()とかmyPhpinfo()みたいにプレフィックスでも付けて差別化するしかない
0242nobodyさん
2012/01/05(木) 11:55:13.54ID:ACIe1UJAPHPコードからではできないですか。
諦めて別名でやってみます。
0243nobodyさん
2012/01/05(木) 12:05:52.58ID:???それはC/C++ソースをコンパイル時にアセンブラ出力して書き換えるようなもの。
無駄をなくすとすれば機械語、アセンブラにたどり着く。
しかし開発効率からそのあたりには手を出さず、PHPやC/C++のコードの範囲でできる事をした方が良い。
0244nobodyさん
2012/01/05(木) 12:15:28.46ID:???Matzも知らないから素人なんだろうと思ってたけど納得だわ>>218
facebook級のサイトのを運営してるSEというなりきり設定がワロタ
PHPの高速化に HipHop vs APC てのがあるみたいだけど
現時点でほとんど性能は変わらないようだし安定性の面でAPCに軍配が上がるのかな。
サクッと作って高速で動かすという技術はPHPが先を行ってる感じ
http://blog.candycane.jp/archives/491
http://dsas.blog.klab.org/archives/51978647.html
0245nobodyさん
2012/01/05(木) 12:28:51.85ID:???どれだけPHPが高速化できたとしても、リソースの少なさ、速度の速さではネイティブ実行形式が上だろ。
0246nobodyさん
2012/01/05(木) 12:43:16.59ID:WqkweKyi0247nobodyさん
2012/01/05(木) 12:50:18.95ID:???0248nobodyさん
2012/01/05(木) 12:52:26.30ID:???0249nobodyさん
2012/01/05(木) 12:57:19.29ID:???シングルトン・マルチスレッド・アプリケーションスコープ、全部理解してないからな
0250nobodyさん
2012/01/05(木) 13:02:42.94ID:???精神病むには最適な職種と言える
0251nobodyさん
2012/01/05(木) 14:48:43.61ID:r8xFdMd/$ary[expr1 ? expr2 : expr3]ってしたとき
expr3の結果を$ary[]にする方法ってないよね
ちなみにnullや''は空文字列で[]とは違う
0252nobodyさん
2012/01/05(木) 14:56:30.73ID:FPSYlk7pclass SQLというのがありまして
function getRecord($limit = NULL, $offset = 0) {
if ($limit) return array_slice($this->record, $offset, $limit);
else return $this->record;
}
というファンクションがあったんですが、
$this->record;のrecordが何を指しているかがわかりません。
recordてもともとPHPに用意されているファンクションなんでしょうか?
0253nobodyさん
2012/01/05(木) 14:57:37.19ID:???0254nobodyさん
2012/01/05(木) 14:58:56.94ID:???0255nobodyさん
2012/01/05(木) 15:09:18.10ID:???0256nobodyさん
2012/01/05(木) 15:09:19.83ID:???0257nobodyさん
2012/01/05(木) 15:20:05.60ID:???0258nobodyさん
2012/01/05(木) 15:22:06.79ID:FPSYlk7pclass SQLの中にrecordというファンクションがなかったので
もともと用意されている何かだとおもったのですが
ググってもでてこなかったので聞いてみました。
まだよくわかっていないのでちょっとクラスについて調べてきます
0259nobodyさん
2012/01/05(木) 15:25:35.51ID:yQXwn+vlDB操作しやすいライブラリとかでおすすめないかな?
プログラム自体は大したことないのに、
テーブルやらカラムやらを大量に作らなきゃいけない予定なんで、
SQLで書くのめんどくさいから、
ソースコードだけで片付くものを探してるとこなんだけど
0260nobodyさん
2012/01/05(木) 15:26:13.26ID:???$this->recordが必ずしもファンクションとは限らないのにファンクションと決めつけてるだろ
そんなことだといつまでも謎のままだぞ
>if ($limit) return array_slice($this->record, $offset, $limit);
これ見たらあー配列なんだなってわかるし
つーことは、名前からしても$this->recordにはどこかでSELECTの結果かなにかを配列としてセットしてるメンバだとわかるだろう
0262252
2012/01/05(木) 15:29:33.28ID:FPSYlk7pprivate $count = 0;
private $host = "localhost";
private $error = null;
protected $link = null;
protected $record = null;
function connect() {
$this->link = mysql_connect($this->host, "???", "?????");
if (!$this->link) return false;
if (!mysql_select_db('recnomi', $this->link)) return false;
return true;
}
function disconnect() {
mysql_close($this->link);
}
function getRecord($limit = NULL, $offset = 0) {
if ($limit) return array_slice($this->record, $offset, $limit);
else return $this->record;
}
0263nobodyさん
2012/01/05(木) 15:30:55.18ID:???そーゆーことならフレームワークのスレへ
ただSQL書かないで最適なクエリを発行することはまず無理だと思う
DB抽象化ライブラリがインデックスまで把握して最適なクエリを発行してくれるものがあればオレも欲しい
0264252
2012/01/05(木) 15:31:28.29ID:FPSYlk7p5行目のprotected $record = null
で定義しているからしたで使えているということなんですか?;
0267252
2012/01/05(木) 15:35:46.96ID:FPSYlk7p$this->recordでrecordに$がついてなかったので
ファンクションだと思ってました。。
勉強してきます
0269nobodyさん
2012/01/05(木) 15:38:38.34ID:???使う機能だけを関数化すればよい。
SQLはコマンドラインでも動作する。難しければそこからやってみてそのあとPHPにするというのもある。
0271252
2012/01/05(木) 15:45:28.44ID:FPSYlk7p5行目のprotected $record = nullでは配列が入っていないとおもうんですが
recordには配列はどうやって入れているのでしょうか?
0272nobodyさん
2012/01/05(木) 15:50:04.64ID:???0273262
2012/01/05(木) 15:51:51.85ID:FPSYlk7p0274nobodyさん
2012/01/05(木) 16:09:56.66ID:???$recordという変数を探して、
名無しの変数なんてねえよ。とわめいたり、
素知らぬ顔で空データ返してくれるPHPを見てると
ちょっと萌えるよね。
こんな技法滅多に使わないけど。
0275nobodyさん
2012/01/05(木) 16:19:40.25ID:???/hoge/fugaというアクセスはclass hogeのfugaメソッドを実行とかね
どんな名前でアクセスしてくるかわからないものを一箇所で処理しようと思ったら便利でしょ
0276nobodyさん
2012/01/05(木) 16:26:11.82ID:???>if ($limit) return array_slice($this->record, $offset, $limit);
クエリ発行時点でoffsetとlimitつけとけよ…
これごっそりレコード取って後から切り出してるだろ
とりあえずこんなクソコード捨てちまえ
0278nobodyさん
2012/01/05(木) 19:29:38.66ID:m/6w1Ethそこでクエリごとに分けて別々に発行すればOKでした。
phpMyAdminでは;で区切ったクエリを実行できるのですが、
これはphpMyAdmin側で複数のクエリに分割して実行しているのでしょうか?
それともこちらのプログラムミスでしょうか?
0279nobodyさん
2012/01/05(木) 19:31:31.15ID:???0280nobodyさん
2012/01/05(木) 19:40:52.08ID:???今どきただのmysql使うなんて時代後れすぎですね
mysqliを積極的に使いなさい
そして○○_query系でsqlを実行するのは今すぐやめましょう
これからは○○_prepareを使いましょう
queryでsql実行してたら業務でやってる人たちに笑われますよ
0281nobodyさん
2012/01/05(木) 19:43:07.94ID:???http://www.php.net/manual/ja/function.mysql-query.php
mysql_query() は、 ひとつのクエリを送信します (複数クエリの送信はサポートしません)。
0282nobodyさん
2012/01/05(木) 19:45:35.06ID:???適当にいうな
>>280
ありがとうございます
>>281
クエリのパースってmysql側でやるものだと思ってたのですが
そういうものなのですか
ありがとうございました
0283nobodyさん
2012/01/05(木) 19:46:47.22ID:???mysqliのmulti_queryはマルチクエリ実行できるよ
ただ得意気に
>そして○○_query系でsqlを実行するのは今すぐやめましょう
>これからは○○_prepareを使いましょう
とか言ってると笑われるから注意な
すべてケースによるから自分で最適なコーディングを探すこと
エスケープやアプリに合わせたサニタイズも考えながらやって
0284nobodyさん
2012/01/05(木) 19:47:41.25ID:???Sqlite2の古い関数使うからダメなんだ。
0286nobodyさん
2012/01/05(木) 19:53:46.88ID:???ボトルネックでないだったら直に送信した方がソースは短くて済む。
決定的な差になるのはトランザクション指定。
0287nobodyさん
2012/01/05(木) 19:54:50.31ID:???0288nobodyさん
2012/01/05(木) 19:55:28.06ID:???バカだwwwwwwwwwwww
prepare使うのは速度のためじゃねえよwwwwwwwwwwwww
0289nobodyさん
2012/01/05(木) 19:58:19.19ID:???そもそもprepareは速く実行するためのものじゃねーし
エスケープを機械的にほぼ保証してくれるから使えるところでは極力使うべき
おまえ>>269,>>284だろ
ずっと明後日の方向見ながらレスしてるぞ
知ったかぶりにも程があるぞ
0290nobodyさん
2012/01/05(木) 21:07:49.16ID:m/6w1Eth二種類のモードのうちMYSQLI_USE_RESULT
というのが、従来のmysqによる結果セットと同じなのかなと思うのですが
http://php.net/manual/ja/mysqli.use-result.php
クライアント側で 大量の処理を行う際は、mysqli_use_result() を 使用すべきではありません。
なぜなら、この関数はサーバとの接続を保持 し続け、取得しているデータに関連するテーブルについて、
他のスレッドから 更新ができなくなるからです。
と書いてありました。
これは接続が保持されている間はテーブルがロックされるということでしょうか?
結果セットはテーブルとは別の領域に作成されるのだから奇妙な処理に思えますが
どういうことなのでしょう
今までのmysql関数でも、接続が保持されている間はテーブルがロックされていたのでしょうか?
0291nobodyさん
2012/01/05(木) 21:17:34.84ID:???これ
>バッファに取得しないで結果オブジェクトを返します。 エラー時には FALSE を返します。
バッファに取得しないってことはなんらかの方法で現状をキープする必要があるでしょ
テーブルロックしてるかどうかしらんけど、してる可能性は高いよ
だからバッファリングしてから使うべき(このメソッドはあまり使うべきではない)ってことになるんじゃね
0292nobodyさん
2012/01/05(木) 21:19:13.82ID:???0293nobodyさん
2012/01/05(木) 21:29:46.87ID:???ちなみに
>二種類のモードのうちMYSQLI_USE_RESULT
>というのが、従来のmysqによる結果セットと同じなのかなと思うのですが
こういう変な固定概念的なものは取り払って素直にゼロから学習しなさいな
じゃないと自分の思うようにいかないことばかりでイライラすることになるよ
一応mysqliでSELECTを投げる場合の標準的な手順だけ
1. プリペアドステートメントセット
2. クエリ実行
3. 結果オブジェクト取得
4. オブジェクトから結果(レコード)取得
概ねこんな感じ
0294nobodyさん
2012/01/05(木) 21:32:31.52ID:???データ取得している間中ロックするとか
なんかありえない処理に思えるのですが・・・
同時に一人しか同一テーブルを読めないってことでしょう
いやありえない
mysqliがおかしいのか
今までも実はそうだったのか・・・
0295nobodyさん
2012/01/05(木) 21:35:54.28ID:???>>293読んでね
で、他にメソッド色々あるでしょ?マニュアル熟読してみてよ
しかも読めないとは書いてないじゃん、更新できないとは書いてあるけど
イロイロと勝手にわかったフリするのは学習の妨げになるよ
■ このスレッドは過去ログ倉庫に格納されています