【PHP】下らねぇ質問はID出して書き込みやがれ 93
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2010/02/15(月) 19:23:06ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 92
http://pc11.2ch.net/test/read.cgi/php/1263035502/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0853nobodyさん
2010/03/12(金) 10:05:46ID:???http://www.php.net/manual/ja/book.bc.php
0854nobodyさん
2010/03/12(金) 10:35:58ID:Yfu1bPWMありがとうございます!
解決しました。
0855830
2010/03/12(金) 10:42:54ID:HJClOaz10856nobodyさん
2010/03/12(金) 11:28:29ID:???0857nobodyさん
2010/03/12(金) 12:03:25ID:???GD アニメgif php でぐぐったら出てきたぜ
0859nobodyさん
2010/03/12(金) 14:48:01ID:cUrmnSSn元々C/C++などのコンパイル言語ということもあり、疑問がありまして。
PHPにもrequireやincludeといった素晴らしい機構があるのですが、
これの引数には変数を指定することができるようです。
となると、PHPというのはincludeなどの展開は実行時に毎回行っているということになりますよね?
PHPはアクセスがあるたびに
・ソースコード解釈
・コンパイル
・実行
をやっているのでしょうか?
それともコンパイル済みの中間ファイルあたりをどこかに持っていて、ソースコードが更新されていなければそちらを使っているのでしょうか?(ファイルの更新日時あたりを利用して)
そして、どちらにしろincludeなどは実行時に動的に読み込まれると。
単にファイルを分割したいだけなので、変数などが使えない高速のincludeなどが欲しいのですが、それは無いものでしょうか?
色々な質問がまざってすいません。
0860nobodyさん
2010/03/12(金) 14:56:20ID:???中間ファイルをキャッシュするためには各種アクセラレータが必要です
APCとかeAcceleratorあたりでググってみて下さい
0861nobodyさん
2010/03/12(金) 15:46:43ID:???処理系に依ります。
Cだってインタープリタがありますし、CやC++でもincludeされる部分は最初に一回だけ
コンパイルして(それが変更されない限り)コンパイル済みコードを再利用するものがあります。
PHPだからとかCだからのように言語で言う話ではないのです、実際のところ。
0862nobodyさん
2010/03/12(金) 15:54:28ID:???0863nobodyさん
2010/03/12(金) 16:01:14ID:???0864nobodyさん
2010/03/12(金) 17:03:24ID:cUrmnSSnありがとうございます。
基本的には毎回コンパイルするイメージなんですね。
元々スピードを求める言語ではないので、それで納得しておこうと思います。
APCなどについてはこれから調べてみます。ちょっと見てみた感じ、とても良さそうですね。
0865nobodyさん
2010/03/12(金) 17:25:34ID:???ですが、対応バージョンがPHP5.0までのようで、新たに追加されたクラスや例外などの関数名がハイライトされません
ユーザ関数として登録もできるのですが、システム関数との見分けがつかなくなるのでなんとかしたいです
PHPエディタ作者は、要望掲示板の内容を読んでいないようで、対応の見込みが無いのですが
他のエディタで、プロジェクト管理機能とテンプレート機能を持つPHPエディタはないでしょうか?
0867nobodyさん
2010/03/12(金) 19:51:29ID:???0868nobodyさん
2010/03/12(金) 19:57:19ID:NKXaLgFF0869nobodyさん
2010/03/12(金) 19:59:35ID:???0870nobodyさん
2010/03/12(金) 20:30:47ID:sa3ugaEOn回以下でリクエストするためにはどうしたらよいでしょうか?
0871nobodyさん
2010/03/12(金) 20:31:23ID:???0872nobodyさん
2010/03/12(金) 20:34:43ID:sa3ugaEOひとりのユーザーがphpを実行しているのではなく、複数のユーザーが実行している時でも
sleepで対応できるのでしょうか?
0873nobodyさん
2010/03/12(金) 20:44:11ID:???0874nobodyさん
2010/03/12(金) 20:48:19ID:???リクエストの度にタイムスタンプ(microtime)を記述したファイルを生成。
また、PHP実行の度に、そのタイムスタンプを読み込み、例えば制限が「1秒に10回まで」なら、
(現在時-タイムスタンプ)が0.1秒以上でないとリクエストしない、とか。
0875nobodyさん
2010/03/12(金) 20:53:12ID:???最新の10件を取り出して一番古いのが1秒居ないだったら待機
0876nobodyさん
2010/03/12(金) 20:56:03ID:???0877nobodyさん
2010/03/12(金) 21:07:16ID:sa3ugaEO0878nobodyさん
2010/03/12(金) 22:15:26ID:???0879nobodyさん
2010/03/12(金) 22:20:23ID:sa3ugaEOそうなるときつい気もしてきました
0880nobodyさん
2010/03/12(金) 22:24:44ID:???なんか制限のあるAPI使うってことはユーザリストと処理内容を元に自分で処理するような気がするんだけど
0881nobodyさん
2010/03/12(金) 22:47:37ID:???モニタは、過去1秒なら1秒間のリクエストの記録(オンメモリ)を保持して、
10個を超えそうならリクエスト拒否。
リクエストが来た時点で記録を調べて、1秒以上古いのは捨てる。
ファイルもDBの要らんでしょ。
0882nobodyさん
2010/03/12(金) 22:50:48ID:???0883nobodyさん
2010/03/12(金) 23:02:16ID:???サーバー負荷が大きくなって初めて調べられて連絡が来るというパターンが多い。
ある時には1秒3回あっても、平均を取ると60秒に20回とかなら、まず文句言われない。
しかも、アフィリエイト系APIの場合には、儲かっていると基準が甘くなったりする。
以上、経験論ではあるけど、例外があったらゴメンナサイ。
0884nobodyさん
2010/03/13(土) 06:06:30ID:GjD8zhAGDBから取ってきたリストをforeachでぐるぐる回してるんですが、
一行評価する度に消えちゃうじゃないですか。
もっかい読み出すっていう関数は無いでしょうか。
<?php foreach( $data["datas"] as $data ){
if($data["category"]==1){
0885nobodyさん
2010/03/13(土) 06:12:36ID:GjD8zhAG(あんま関係ないけど)cheetan使ってまして、
MySQLのテーブルにname,categoryとあったとして、
ビューで呼び出す側のindex_.html側で
<?php
foreach( $data["datas"] as $data ){
if($data["category"]==1){
echo $data["name"];
}
}
foreach( $data["datas"] as $data ){
if($data["category"]==2){
echo $data["name"];(上と全く同じ処理)
}
}?>みたいな事をやって結果的に
category 1の人は Aさん、Cさん、Eさん
category 2の人は Bさん、Dさん
みたいに出力したいのですが、
なんか根本的に処理がおかしい気が自分でもしてます;
0886nobodyさん
2010/03/13(土) 06:19:34ID:TPMaSDUCリソースから1行ずつ取り出して新たに配列作れば使いまわせたんで、
とりあえずそうしてます。
$result = mysql_query($sql,$con);
while( $row = mysql_fetch_array($result) ){
$data[] = $row;
}
0887nobodyさん
2010/03/13(土) 06:35:40ID:???俺だったらcategoryをキーにした連想配列に入れて再度ループして表示するか
予めカテゴリ別に取得して表示するか
DBのAPI利用してグループ化して取得して表示するかする
0888nobodyさん
2010/03/13(土) 06:42:00ID:GjD8zhAG>>886 配列に入れてからfor文でまわすのを
繰り返すっていう事でしょうか。
>>887 DBもっかい取ってくるってのは、その分SELECT文が
走るって事ですよね。サーバのHDD負荷をできる限り減らしたい
ので、みんなどうしてるんだろなって。
HTML出力する時に、HTMLって上から下に書かないといけない
じゃないですか;前に戻って書けないというか。
やっぱぐるぐる回すしかないんですかね;
0889nobodyさん
2010/03/13(土) 06:53:46ID:???いやDBもっかい取ってくるのは3行目だけだが。
あと別にHTML出力は変数に入れて最後にまとめて表示してもいいし、
887で書いたのはロジックを先に処理してあとで表示する方法
0890nobodyさん
2010/03/13(土) 12:03:41ID:???<?php
foreach( $result as $row ){
if($row["category"]==1){
$temp .= $row["name"];
}elseif($row["category"]==2){
$temp2 .= $row["name"];
}
}
echo $temp . $temp2;
?>
0891nobodyさん
2010/03/13(土) 12:05:16ID:???0892nobodyさん
2010/03/13(土) 12:05:18ID:???0893nobodyさん
2010/03/13(土) 12:06:08ID:???0894nobodyさん
2010/03/13(土) 12:13:05ID:???708 名前:デフォルトの名無しさん 投稿日:2005/05/11(水) 23:22:55
20通りくらいのパターンをswitch文を使って表しているのですが、
switchは遅いという情報を見つけました。
ifで表現したら速くなりますか?
A
基本的には気にする必要なし。
switchの分岐が多すぎることの方が問題。
710 名前:デフォルトの名無しさん 投稿日:2005/05/11(水) 23:26:16
>>708
君が気にする程違うわけでもなし、
気にしないといけない程
クリティカルなプログラムも書かないだろうし、
何よりコンパイラのオプティマイザに任せた方が
余程いい結果が得られる。
711 名前:デフォルトの名無しさん 投稿日:2005/05/11(水) 23:27:48
そもそも case や else がアホみたいに出てくるのは
良くない設計の兆候。まずは設計を見直せ。
714 名前:デフォルトの名無しさん 投稿日:2005/05/11(水) 23:42:02
>>708
switchをジャンプテーブルに変換してくれるコンパイラならifより速い
0895nobodyさん
2010/03/13(土) 13:03:19ID:???0896nobodyさん
2010/03/13(土) 21:22:52ID:???html内に出来るだけ短いphpで画像をランダム表示させようとしてるんだけれど、どうしてもうまくいかない。
<?php
$num = rand(1,200);
print "<img src=\"imagfile\{$num}.jpg\">\n";
?>
まだ始めたてでスレ内のレベルの高さにgkbrしてるけど、お願い
0897nobodyさん
2010/03/13(土) 21:26:42ID:???0898nobodyさん
2010/03/14(日) 03:08:12ID:P9+VbQHb結局こうなった…。
foreach($data["datas"] as $data){
$temp=(そのレコード行に対するタグを延々出力);
$temp.=$data["name"];
$temp.=(そのレコード行に対するタグを延々出力);
$cate[$data["category"]][]=$temp;
}
とやっておいて
echo "<h1>category 1の人は</h1>";
for($i=0;$i<count($cate[1]);$i++){ echo $cate[1][$i]; }
echo "<h2>category 2の人は</h2>";
for($i=0;$i<count($cate[2]);$i++){ echo $cate[2][$i]; }
…以下続く
とりあえず出力は期待通りになったけど、正直、なんか納得
いってないw しかしみんなありがとう。
0899nobodyさん
2010/03/14(日) 03:16:00ID:P9+VbQHb>>891 それだ!w PHP側でメモリの操作でやるのとorder byでソート
させとくのとどっちが高負荷でどっちが処理的に高速、また
効率良しなんでしょうかね。あんま拘るとこじゃないか…。
>>892 今回のと関係ないんですけど、他の記載箇所で、
全然平気でcase:1〜case:100とか出てくるんですが、やっぱダメです
よね…。用途は、さっきのcategoryが0-99あるとして、
対応する文字列を出力してるんですが、ほんとはDBに入れて
アソシエーションっていうんでしょうか、そっから引っ張ってくるべき
なのかなとか思ってました。。どうなんでしょうか。。
0900nobodyさん
2010/03/14(日) 11:54:00ID:???0901nobodyさん
2010/03/14(日) 16:55:47ID:???0902nobodyさん
2010/03/14(日) 17:27:47ID:???0903nobodyさん
2010/03/14(日) 18:09:51ID:???http://mlb.mlb.com/index.jsp
0904nobodyさん
2010/03/14(日) 20:43:36ID:afDdQzXD見やすさからBで書いてましたが、順番に処理を実行できるという意味では、
Aが正しい書き方な気がするのです。
【書き方A】
if (!empty($this->data)) {
$this->Book->create();
if ($this->Book->saveall($this->data)) {
$this->redirect(array('action' => 'index'));
}
【書き方B】
if (!empty($this->data)) {
$this->Book->create();
$this->Book->saveall($this->data);
$this->redirect(array('action' => 'index'));
}
0905nobodyさん
2010/03/14(日) 20:51:05ID:???0906nobodyさん
2010/03/14(日) 20:58:12ID:afDdQzXDありがとうございます。
0907nobodyさん
2010/03/15(月) 00:26:18ID:???saveAll()って失敗してもtrue返ってくるんじゃなかったっけ
0908nobodyさん
2010/03/15(月) 01:57:58ID:uc4oih1Jはい、CAKEPHPです。
ということは、常にAのような書き方をしたほうがよいということでしょうか?
すみません、発言の内容がよくわからなくて。
0909nobodyさん
2010/03/15(月) 02:11:15ID:7k3Do5eSその変数から呼び出すことってできますか?
↓こんな感じな事を想像してるのですが
$func = "strcmp";
if (!$func("文字1", "文字2")) {
echo "一致";
}
0911909
2010/03/15(月) 02:26:07ID:7k3Do5eSΣ(´∀`;) できるのですかっ
スイマセン 試せばよかったですね ; ;
ありがとうごさいました!
0912nobodyさん
2010/03/15(月) 06:24:34ID:wB2/C/Duただ、毎回重いわけではなくリロードすると5回に1回くらいの割合で重くなります。
なにぶん初めてサイトを作っているので、これがスクリプトに問題があるのか
サーバーに問題があるのか、CSSに問題があるのかわかりません。
私的にはスクリプトが原因なら毎回重くなるハズだからサーバーかな?と思っているのですが
スクリプトに原因があったとしても読み込み速度が毎回大幅に違うという可能性はあるのでしょうか?
0913nobodyさん
2010/03/15(月) 07:26:57ID:???0914nobodyさん
2010/03/15(月) 10:05:28ID:???・FireBugで接続時間の計測
これで切り分けな
0915nobodyさん
2010/03/15(月) 11:53:49ID:ToDwupd9質問です。
一度定義された関数を、未定義状態に戻す。もしくは上書き定義することはできますでしょうか?
また同様に、クラスはどうでしょうか?
----------
require("app_hoge"); // ここの中でfuncという名前の関数が定義されている。
func();
//ここでfuncの定義を消したい
require("app_test"); // ここの中でもfuncが定義されている
----------
現状ですと、下記のようなエラーとなります。
Fatal error: Cannot redeclare func()
0916nobodyさん
2010/03/15(月) 12:00:24ID:???0917nobodyさん
2010/03/15(月) 12:10:02ID:???function_existsでチェックしてから定義とかあるけど・・・
違うものなら、名前変えようよ。
0918nobodyさん
2010/03/15(月) 12:45:56ID:???0919nobodyさん
2010/03/15(月) 12:54:27ID:???or
runkit_function_remove('func');
どちらもインストールされてる環境のほうが稀
0920nobodyさん
2010/03/15(月) 13:10:12ID:???あれ?みんなどうやってんだ?
0921nobodyさん
2010/03/15(月) 13:21:46ID:???0923nobodyさん
2010/03/15(月) 13:42:29ID:R2wjg7Ee0924nobodyさん
2010/03/15(月) 13:49:00ID:???file_get_contentsで読み込んで
mb_convert_encodingで変換して
file_put_contentsで吐き出すとか。
俺ならexecでnkf使っちゃうけど。
0926nobodyさん
2010/03/15(月) 14:35:03ID:???0928nobodyさん
2010/03/15(月) 14:49:26ID:???だっておおおおおwwwwww
ならなんのためにnamespaceって技術が生まれたんだ?wwwwwww
0929923
2010/03/15(月) 14:51:01ID:R2wjg7Eeありがとうございます。
nkfのほうがよさそうなんでそちらでやってみます。
0930nobodyさん
2010/03/15(月) 15:04:06ID:???0931nobodyさん
2010/03/15(月) 15:04:57ID:???0932nobodyさん
2010/03/15(月) 15:06:15ID:???名前がぶつからないようにするのが基本って考えも相当危ういかと
いざぶつかったらどうしようもない。って意味だし
0933nobodyさん
2010/03/15(月) 15:12:51ID:???PHPごときでそこまで気にしたライブラリ作ってる人間いないだろ
ぶつかる時はぶつかるよ
0934nobodyさん
2010/03/15(月) 15:13:30ID:???ライブラリの命名は被らないように注意するのが基本だと思うよ
ネームスペースにしたってJavaのパッケージ名のようにしない限りは被る確立は同じに思えるし
ただネームスペースの場合は、1箇所修正するだけで済むっていうメリットはあるけどね
0936nobodyさん
2010/03/15(月) 17:21:58ID:EtpL+ybWclass Takahashi_Lib
{
function textedit() {
return 1;
}
function foodmenu() {
return "FoodSet";
}
}
$class = new Takahashi_Lib();
echo $class->foodmenu;
}
0938nobodyさん
2010/03/15(月) 18:21:42ID:???変数にするな。インスタンス生成するな
0939nobodyさん
2010/03/15(月) 18:26:16ID:???const textedit = 1;
const foodmenu = "FoodSet";
}
echo Takahashi_Lib::foodmenu;
これが正解
0940nobodyさん
2010/03/15(月) 18:29:09ID:???0941nobodyさん
2010/03/15(月) 18:31:17ID:???0942nobodyさん
2010/03/15(月) 19:02:16ID:e8CcSYKq前半のif文でtrueの場合のみ、 div class="actions" の内容を表示するという処理をしたいです。
どのように書けば上手くいくでしょうか?
<?php if ($userinfo['User']['role'] == 3); ?>
<div class="actions">
<ul>
<li><?php echo $html->link(__('Add Book', true), array('action' => 'add')); ?></li>
</ul>
</div>
0943nobodyさん
2010/03/15(月) 19:10:49ID:???<?php } ?>
0944nobodyさん
2010/03/15(月) 19:30:32ID:e8CcSYKqありがとうございます!
バッチリ綺麗に動きました!
0945nobodyさん
2010/03/15(月) 19:33:44ID:???Takahashi_Lib::foodmenuの書き方って
Takahashi_Lib->foodmenuみたいにアロー演算子と同じ?
0946nobodyさん
2010/03/15(月) 19:34:31ID:???・・・IDは?
0947nobodyさん
2010/03/15(月) 20:06:06ID:QBlQMDaRclassの中のfunction(data_ijiru())にGET文字(20100315)を渡して処理した内容を出力したいのですがどのように書くのでしょうか?
class data
{
private function data_ijiru($data){
$data = md5() . $data;
return $data;
}
}
$obj = new data();
echo $obj->data_ijiru($_GET['data']);
0948nobodyさん
2010/03/15(月) 20:06:11ID:???0950nobodyさん
2010/03/15(月) 20:09:59ID:???privateだからアクセスできねーんだろ
これもインスタンスを生成する必要が全くねーよな…
class data{
static function data_ijiru($data){
return $data = md5() . $_GET['data'];;
}
}
echo data::data_ijiru();
0951nobodyさん
2010/03/15(月) 20:14:24ID:???0952nobodyさん
2010/03/15(月) 20:18:10ID:???関数だけにしとけ
レス数が950を超えています。1000を超えると書き込みができなくなります。