我有四个文件。
index.php <---> bridge.php <---> fetch.php <---> Mysql
我的index.php文件包含以下代码,并且因为我使用的是JavaScript! .htaccess文件阻止了index.php文件访问我的fetch.php文件,而javascript是“客户端”
<script>
$(document).ready(function(){
function load_data(query)
{
$.ajax({
url:"bridge.php",
method:"post",
data:{query:query},
success:function(data)
{
$('#result').html(data);
}
});
}
因此,我将自己的javascript代码称为bridge.php文件,并将bridge.php文件称为fetch.php文件使用PHP语言,以使所有这些工作正常进行。
所以我的bridge.php文件代码:
<?php
include 'fetch.php';
?>
现在没有人可以直接访问fetch.php .htaccess文件阻止任何直接连接抛出浏览器,但如果我将文件bridge.php抛出浏览器,它将打开数据库!那什么都解决不了!我在做什么错了?
这是我的.htaccess文件的代码:
<Files ~ "fetch.php">
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Files>
这就是我的提取文件如何调用MySQL:
$connect = mysqli_connect("localhost", "example.com", "passowrd", "databasename");
$output = '';
if(isset($_POST["query"]))
{
$search = mysqli_real_escape_string($connect, $_POST["query"]);
$query = "
SELECT * FROM tbl_customer
WHERE CustomerName LIKE '%".$search."%'
OR Address LIKE '%".$search."%'
OR City LIKE '%".$search."%'
答案 0 :(得分:1)
我认为您使问题变得过于复杂,或者您以无济于事的方式撰写了fetch.php
。
我猜您的fetch.php
中包含MySQL函数或类代码,您可以随后访问和使用。像这样:
<?php
define('MYSQL_SERVER','localhost');
define('MYSQL_LOGIN','mylogin');
... and more ...
class DB {
... methods ...
}
?>
fetch.php
的关键部分应该是开头<?php
和结尾?>
。
如果您(或其他任何人)直接请求fetch.php
,则应以这样的方式编写代码,使结果完全空白。
Web服务器上唯一的开销就是单个PHP传递,然后传递空白返回给浏览器。
如果您以其他方式编写了代码,建议您重新考虑自己的方法,并问为什么做完了自己的事。
顺便说一句,只有在没有其他方法的情况下,才应将详细信息添加到.htaccess
文件中。到web server preformance, they are not a good idea。
编辑:
如果您确实要确保不直接调用fetch.php
而是仅将其包含在另一个文件中,则可以在顶部执行以下操作:
<?php
if (count(get_included_files()) == 1) {
// direct request, do nothing
exit;
// or even redirect somewhere like
header("Location: /");
exit;
}
// has been included, allow rest of script to process
$connect = mysqli_connect("localhost", "example.com", "passowrd", "databasename");
// ... more code below