PHPの最適化

WBOY
WBOYオリジナル
2016-06-23 14:23:561012ブラウズ

この投稿は xuzuning によって最終編集されました: 2013-09-30 13:05:14

<?php//define server info begin$servername = "192.168.1.182";  $serverusername = "whh";  $serverpassword = "whh"; $database="whh";$usertable="user";$userfield="user_name";$passwordfield="password";//define server info end$fh  = fopen("php://stdin", 'r');$stdout = fopen('php://stdout', 'w');$fs = fopen("auth-log.txt." . getmypid(), 'a');if(!$fh){    die("Cannot open STDIN\n");}do{    $lenBytes = fgets($fh, 3);    $len = unpack('n', $lenBytes);    $len = $len[1];    if($len<1) continue;    $msg = fgets($fh, $len+1);    $toks=explode(':',$msg);    fwrite($fs, $msg . "\n");    $method = array_shift($toks);    fwrite($fs, "$method\n");    $result = false;    switch($method){        case 'auth':            list($username, $server, $password) = $toks;            $password = trim($password);            fwrite($fs, "checking user: $username and password $password\n");            //check password begin						$conn=mysql_connect($servername, $serverusername, $serverpassword); 						mysql_query("set names 'utf8'");						if(!$conn){                              						  die("could not connect to the database");						}						$db_select=mysql_select_db($database);//选择数据库        						if(!$db_select)						{						  die("could not to the database");						}						$query="select * from $usertable where $userfield = '$username' and $passwordfield='$password'";//构建查询语句						$result=mysql_query($query);//执行查询						$count=mysql_numrows($result);//取得条数						mysql_close($conn);						if($count > 0){							$result = true;						}else{							$result = false;						}						//check password end            break;        case 'isuser':            list($username, $server) = $toks;            //check password begin						$conn=mysql_connect($servername, $serverusername, $serverpassword); 						mysql_query("set names 'utf8'");						if(!$conn){                              						  die("could not connect to the database");						}						$db_select=mysql_select_db($database);//选择数据库        						if(!$db_select)						{						  die("could not to the database");						}						$query="select * from $usertable where $userfield = '$username'";//构建查询语句						$result=mysql_query($query);//执行查询						$count=mysql_numrows($result);//取得条数						mysql_close($conn);						if($count > 0){							$result = true;						}else{							$result = false;						}						//check password end            break;        default:            $result = false;    }        $message =  @pack("nn", 2, $result);        fwrite($stdout, $message);        $dump = @unpack("nn", $message);        $dump = $dump["n"];        fwrite($fs, $dump . "\n");        flush();} while(true);

皆さん、こんにちは!
PHP がわかりません。この PHP を最適化できるかどうか確認してもらえますか?
Java を作成したところ、「$conn=mysql_connect($servername, $serverusername, $serverpassword);」という場所にあることがわかりました。を作成できるため、毎回 $conn を生成する必要はありません。

ディスカッションへの返信 (解決策)

最適化するものは何もありません
受信データには認証のみがある可能性もあれば、isuser のみの可能性もあり、おそらくどちらも存在しない可能性があります
データベースにアクセスする可能性がある状況では、これは完全に不要です必要ありません 次に、データベース接続を行います

プログラムの最適化はコードを減らすことではなく、パフォーマンスを向上させることです

受信パラメータが一貫している場合、$conn とその判断は do... の前に言及できます。 while

入力パラメータがすべて一致している場合、$conn とその判断を do...while の前に記述することができます。入力パラメータが一貫している場合、$conn とその判断は do...while で言及できます
質問があればフォローしてください ~~

投稿して質問してください。難しい場合は Lao Xu がやります。簡単ならみんなやります




受け取ったパラメータが一貫している場合、$conn とその判断は do ..while で言及できます

質問がある場合は注意してください~~

投稿してください。聞いてください、老徐にとってそれは難しいですが、多くの人にとっては簡単です
あなたが誰かのウェブゲームのプライベートチャットに返信したのを見ましたが、あなたはそうしますか?



受け取ったパラメータが一貫している場合、$conn とその判断を do...while の前に記述することができます

ご質問があれば質問させていただきます~~
投稿を投稿してください。老徐が行動を起こすのは難しいですが、簡単です 多くの人が行動を起こしました
あなたが誰かのウェブゲームのプライベートチャットに返信したのを見ましたが、あなたもそうしますか?
いや、原理はわかっているだけです



入力パラメータが一貫している場合、$conn とその判断は do...while の前に記述できます
ご注意ください。ご不明な点がございましたら、お問い合わせください。 ~~
質問する投稿を投稿する まあ、Lao Xu が行動を起こすのは難しいですが、多くの人が行動を起こすのは簡単です
あなたがウェブ ゲームで誰かのプライベート チャットに返信したのを見ましたが、実行しますか?
いいえ、原理だけは知っています
ああ、わかりました、ありがとうございます。でも、この種の手順を実行できる人を知っていますか?

ああ、分かった、ありがとう、でもこの種の手続きができる人を知っていますか?
最近は PHP をほとんど書いていないので、仕方ありません

なぜこの質問をするのですか?

私たちのプロジェクトで使用されているチャットサーバーは ejabberd であるためです。現在、クライアントは smack 経由で接続されています。
同時ユーザー ログインの最大数は 5 人だけであることがわかりました。

したがって、問題はこれら 3 つの側面に現れるはずです

A.smack クライアント。
B. ejabberd サーバー自体の構成
C. ejabberd が外部検証を実行する場合、php 経由で mysql に接続します。 (なのでphpで最適化できるものがないか見ていきます)


pdo, prepare() を使用します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。