优化php代码以减少php处理
在处理大量流量时,我的apache服务器出现了一些问题。经过一些优化后,我做到了。我仍然有同样的问题。我检查了我的日志文件,结果发现我有很多php处理。下面的代码每分钟被处理800次(当我有高流量时),并使我的服务器崩溃 1) 我是否需要重写代码的任何部分,以减少php处理的时间? 2) 在html启动之前拥有所有这些代码是一个好主意吗优化php代码以减少php处理,php,Php,在处理大量流量时,我的apache服务器出现了一些问题。经过一些优化后,我做到了。我仍然有同样的问题。我检查了我的日志文件,结果发现我有很多php处理。下面的代码每分钟被处理800次(当我有高流量时),并使我的服务器崩溃 1) 我是否需要重写代码的任何部分,以减少php处理的时间? 2) 在html启动之前拥有所有这些代码是一个好主意吗 <?php $ip = $_SERVER['REMOTE_ADDR']; mysql_connect('', '', ''); mysql_select_
<?php
$ip = $_SERVER['REMOTE_ADDR'];
mysql_connect('', '', '');
mysql_select_db('');
if(empty($_GET['i']) == false){
$get_image = mysql_real_escape_string($_GET['i']);
$check_if_image = mysql_query("SELECT `id`, `image_name`, `image_type`, `image_caption`, `image_voteup`, `image_votedown`, `image_views`, `fb_userid` FROM images_new WHERE image_name = '$get_image'");
if(mysql_num_rows($check_if_image) == 1){
$result = mysql_fetch_assoc($check_if_image);
$image_id = $result['id'];
$image_name = $result['image_name'];
$image_type = $result['image_type'];
$image_caption = stripslashes($result['image_caption']);
$image_voteup = $result['image_voteup'];
$image_votedown = $result['image_votedown'];
//$image_date = $result['image_date'];
$image_views = $result['image_views'];
$fb_username = $result['fb_username'];
$fb_userid = $result['fb_userid'];
//next image
$next_image_id = $image_id + 1;
$check_next_image = mysql_query("SELECT `image_name` FROM images_new WHERE id = '$next_image_id'");
if(mysql_num_rows($check_next_image) == 1){
$next_image_result = mysql_fetch_assoc($check_next_image);
$next_image_name = $next_image_result['image_name'];
}
// pre image
$pre_image_id = $image_id - 1;
$check_pre_image = mysql_query("SELECT `image_name` FROM images_new WHERE id = '$pre_image_id'");
if(mysql_num_rows($check_pre_image) == 1){
$pre_image_result = mysql_fetch_assoc($check_pre_image);
$pre_image_name = $pre_image_result['image_name'];
}
//shares, comments, and likes
$fb_page_url = "http://www.xxx.com/images.php?i=".$get_image;
$fb_url = "http://api.facebook.com/restserver.php?method=links.getStats&urls=".urlencode($fb_page_url);
$fb_xml = file_get_contents($fb_url);
$fb_xml = simplexml_load_string($fb_xml);
$fb_shares = $fb_xml->link_stat->share_count;
$fb_likes = $fb_xml->link_stat->like_count;
$fb_likes_and_shares = $fb_likes + $fb_shares;
$fb_comments = $fb_xml->link_stat->commentsbox_count;
//facebook
require_once('scripts/facebook.php');
$config = array('appId' => '','secret' => '');
$params = array('scope'=>'user_likes,publish_actions,email,offline_access,user_birthday');
$facebook = new Facebook($config);
$user = $facebook->getUser();
if($user){
try{
$user_profile = $facebook->api('/me','GET');
$user_id = $user_profile['username'];
$expire_time = time() + 30758400;
//insert cookie id
if (!isset($_COOKIE['id'])){
$cookie_id = $user_profile['username'];
setcookie("id", $cookie_id, $expire_time, '/');
}
//insert cookie name
if (!isset($_COOKIE['name'])){
$user_name = $user_profile['first_name'];
setcookie("name", $user_name, $expire_time, '/');
}
//check if the user like the fan page
$isFan = $facebook->api(array(
"method" => "pages.isFan",
"page_id" => ''
));
}catch(FacebookApiException $e) {
error_log($e->getType());
error_log($e->getMessage());
}
}else{//if no user
if(isset($_COOKIE['name'])){
$user_name = $user_profile['first_name'];
setcookie("name", $user_name, time() - 30758400, '/');
}
}
//increase views
if($facebook->getUser()){
mysql_query("UPDATE images_main SET image_views = image_views + 1 WHERE image_name='$image_name'");
mysql_query("UPDATE images_new SET image_views = image_views + 1 WHERE image_name='$image_name'");
}
}else{//image was not found in the database.
header('Location: index.php');
}
}else{//redirect if get is empty
header('Location: index.php');
}
?>
我想说的关键因素是你对Facebook API的调用,这些东西总是很昂贵而且很容易缓存,把这些代码放在一个单独的页面中/包含并缓存它
也作为一个旁注,你应该考虑减少DB查询的数量,你可能希望更新你的DB驱动程序…正如每个人总是指出的那样,@Madara Uchiha
我想说的关键因素是你对Facebook API的调用,这些东西总是很昂贵而且很容易缓存,把代码放在一个单独的页面中/包含并缓存它,就像你喜欢的那样
也作为一个旁注,你应该考虑减少DB查询的数量,你可能希望更新你的DB驱动程序…正如每个人都指出的那样,Madara Uchiha
我一下子就看到了一些东西
第一个问题:
$check_if_image = mysql_query("SELECT `id`, `image_name`, `image_type`, `image_caption`, `image_voteup`, `image_votedown`, `image_views`, `fb_userid` FROM images_new WHERE image_name = '$get_image'");
若你们只需要返回一个结果,那个么在末尾加上一个“限制1”(除非这个字段有一个唯一的索引,在这种情况下这不重要)。还要确保该字段已编制索引,最好是VARCHAR字段,而不是TEXT或BLOB
接下来,您将运行2个查询以获取上一个和下一个图像。我会将其合并为一个查询,如下所示:
SELECT `image_name` FROM images_new WHERE id IN ('$next_image_id', '$pre_image_id')
此外,您可以将我提到的第一个优化应用于以下两个查询:
if($facebook->getUser()){
mysql_query("UPDATE images_main SET image_views = image_views + 1 WHERE image_name='$image_name'");
mysql_query("UPDATE images_new SET image_views = image_views + 1 WHERE image_name='$image_name'");
}
最后,通过FacebookAPI将增加加载时间,这是您无法做的。希望这能让你走上正确的道路。我马上看到一些东西
第一个问题:
$check_if_image = mysql_query("SELECT `id`, `image_name`, `image_type`, `image_caption`, `image_voteup`, `image_votedown`, `image_views`, `fb_userid` FROM images_new WHERE image_name = '$get_image'");
若你们只需要返回一个结果,那个么在末尾加上一个“限制1”(除非这个字段有一个唯一的索引,在这种情况下这不重要)。还要确保该字段已编制索引,最好是VARCHAR字段,而不是TEXT或BLOB
接下来,您将运行2个查询以获取上一个和下一个图像。我会将其合并为一个查询,如下所示:
SELECT `image_name` FROM images_new WHERE id IN ('$next_image_id', '$pre_image_id')
此外,您可以将我提到的第一个优化应用于以下两个查询:
if($facebook->getUser()){
mysql_query("UPDATE images_main SET image_views = image_views + 1 WHERE image_name='$image_name'");
mysql_query("UPDATE images_new SET image_views = image_views + 1 WHERE image_name='$image_name'");
}
最后,通过FacebookAPI将增加加载时间,这是您无法做的。希望这能让您走上正确的道路。该数据多久更改一次?它可以被缓存吗?不要看所有的东西——我想说你肯定会从某种形式的缓存中获益,比如memcached。您是如何将php作为Apache模块或CGI二进制文件运行的?我不会更改代码本身。但是页面内容会根据url进行动态更改。请不要使用mysql.*
函数编写新代码。它们不再得到维护,社区已经开始。看到了吗?相反,你应该学习并使用或。如果你不能决定哪一个,我会帮你的。如果您选择PDO,那么该数据多久更改一次?它可以被缓存吗?不要看所有的东西——我想说你肯定会从某种形式的缓存中获益,比如memcached。您是如何将php作为Apache模块或CGI二进制文件运行的?我不会更改代码本身。但是页面内容会根据url进行动态更改。请不要使用mysql.*
函数编写新代码。它们不再得到维护,社区已经开始。看到了吗?相反,你应该学习并使用或。如果你不能决定哪一个,我会帮你的。如果您选择PDO。