假设我有一个包含
的页面config.php<?php
$username = "your_name";
$password = "your_password";
$hostname = "localhost";
//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";
?>
我知道我需要包含这个config.php文件,我想确保数据库连接。但是有没有办法在全局范围内执行此操作,以便我不需要在每个必需页面中包含连接文件?我这样问,因为我看到很多脚本,他们在特定的php页面中运行查询而不包括数据库连接文件!
答案 0 :(得分:1)
我通常的方法是创建一个自动加载器函数,以便在需要时引入类,并让类处理数据库连接。但是对于某些项目来说可能有些过分。此外,配置仍然需要包含在我的代码之前,该代码需要一个类,并期望得到一些东西。
许多开源PHP软件会在配置文件中设置这样的值,这些配置文件很早就会被包含在内,而且还包含任何库等。
例如(LM)NucleusCMS使用配置文件加载全局函数和其他核心类,这样PHP脚本唯一需要做的就是确保包含了config.php。
有时您正在查看的代码打算在运行时被其他代码包含在内,因此相信这些设置已经到位。例如,我目前正在开发一个项目,将所有对PHP文件的调用重定向到start.php,它执行所需的操作,然后在此之后调用该文件,最后调用模板来处理输出。
如果你真的不想做任何包含,那么还有另一种选择,但不建议这样做。您可以设置php.ini指令auto_prepend_file,并将该文件包含在服务器运行的每个脚本中。正如我所说,你可能不希望这样。
然而,如果您希望让脚本为您处理包含,那么这很重要,然后使用.htaccess和start.php示例(实际上是./engine/start.php)然后这可能对您有用而不是用ini指令愚弄。然而,缺点是你需要检查你的.htaccess重定向是否正常工作将文件名传回start.php,然后确保一些顽皮的用户不要求你的脚本做坏事。一旦你进行了清理并且完整性检查了输入,那么你可以继续使用require_once($ filename)......
我的.htaccess看起来有点像这样:
RewriteEngine on
RewriteRule ^(.*).php?$ ./path/to/start.php?page=$1 [QSA,L]
然而,正如我已经说过的,除非你有特殊的需要这样做,否则你不会因为你允许任何输入到include / require行而更加安全,并且必须在每个页面加载上花费大量资源确保请求是安全的。
说实话,最常见的最佳做法是使用一个名为common.php的文件,并拥有脚本需要访问的所有内容,只需
require_once('./path/to/common.php');
位于每页的顶部。如果您的项目最终有很多类和/或库,那么您可能会对此感到高兴。
答案 1 :(得分:0)
我通常处理数据库连接的方式是将我的配置文件包含在我的header.php(处理导航,徽标等)文件中,并且必须包含头文件以保持一致性。
这是一个可以尝试的解决方案
答案 2 :(得分:0)
您应该在每个页面上都包含此代码。这就是PHP的工作原理。
如果你不想手动完成并且项目很大,你应该考虑在你的项目上使用框架。良好的PHP框架可以处理数据库连接和许多其他常见任务,如请求/响应处理,验证等。
There are plenty of PHP frameworks您可以选择适合自己的内容。