2012-03-01 82 views
2

我最近一直在为为我工作的公司构建的网站进行大修。因为我在一年前开始了这个项目,所以我的编程技巧已经有了很大的提高,我希望能够加快网站的速度。我对这个项目的主要焦点是安全性和速度。我一直在做的一件事是改变我所有的PHP连接,以确保它们安全快速。这是我一般遵循从数据库中提取的东西时的格式:优化PHP连接

<?php 

    //Connect to MySQL 
    require_once('includes/config.php'); 

    $link = mysql_connect($host, $user, $pass); 
    if(!$link) { 
     die('Server connection failed. Please refresh the window. If this problem persits, please send an e-mail to <me>'); 
    } 
    $db = mysql_select_db($database); 
    if(!$db) { 
     die("Unable to select database"); 
    } 

    $qry="SELECT * FROM <table> WHERE Category='<parameter>' ORDER BY substr(`P/N`,1,4) ASC"; 
    $result=mysql_query($qry); 

while($row = mysql_fetch_array($result)) 
    { 
    echo " 
    //Output code 
"; 
    } 
?> 

首先,什么是存储连接变量的最佳方式,如MySQL用户名/密码?在上面的代码中,我使用了一个包含我所有服务器变量的require_once('includes/config.php')。这是一个安全的方式来做到这一点?或者,还有更好的方法?其次,我应该更好地管理内存吗?我正在阅读关于mysql_close()的这个网站上的PHP文档和问题,并且我得出结论,我并不需要它。但是,最近我一直在获得相当数量的失败连接。

警告:mysql_connect()函数[function.mysql-CONNECT]:无法连接到MySQL服务器

是否有可能这个错误是我的一个坏的编码技术结束了吗?或者更可能与我们的托管公司?

回答

2

您可以将您的登录名和密码存储在Web根目录下,并将其包含在require_once()中。

您可以使用mysql_pconnect()来使用持久连接,以便将来的查询只使用打开的连接而不尝试重新连接。理想情况下,您希望尽可能多地使用缓存层来消除这些连接,以便USER只访问缓存,并且您的缓存编写器只能访问数据库。然后,您设置一个cron或事件驱动的系统,以合理的时间间隔更新缓存,以根据您的应用程序需求控制负载。

+0

如果我们自己没有托管网站,这可能吗? – 2012-03-01 17:59:24

+0

当然,我不明白为什么不。我已经为在Hostrocket和MediaTemple上托管自己站点的客户完成了所有这些功能。 – AlienWebguy 2012-03-01 18:09:16

+0

OMG pconnect作为一种治疗方法。 – 2012-03-01 18:10:28

0

您应该拥有MySQL root用户名和密码,这样人们无法通过互联网访问文件,但PHP仍然可以像在本地计算机上一样。这可以避免像搞乱PHP配置这样的事情,使你的密码可以访问。

+0

如果我们自己没有托管网站,这可能吗? – 2012-03-01 17:59:01

+0

是的,如果你使用FTP你有一个文件夹叫做public_html或htdocs或类似的文件必须在里面可以通过互联网访问? – Joel 2012-03-01 18:48:23

1

一吨人存储他们的数据库连接像这样和require它根据需要。你可以使用一个ORM层,如RedBeanDoctrine来抽象连接,所以你的代码中没有直接的sql。

mysql_close()这里的manual说什么:

mysql_close()关闭到与指定连接标识所关联的MySQL服务器 非持久连接。

通常不需要使用mysql_close(),因为非持久性打开 链接在脚本执行结束时自动关闭。

作为Joel提到的,你绝对不应该在一个面向web的应用程序上执行查询,使用户只有访问数据库所需的权限。在任何地方打开root访问权限只是要求被黑客入侵。

-3

这是一个安全的方法吗?

警告:mysql_connect()函数[function.mysql-CONNECT]:无法连接到MySQL服务器

这就是问题数据库服务器,而不是你的应用程序