我有两台服务器。我想通过第一台服务器从第二台服务器删除文件!
例如:
我制作了两个php文件 - 第一台服务器上的文件和第二台服务器上的文件。
第一台服务器上的文件包含
files.php
while($file = mysql_fetch_array($files){
echo $file['file_name'];
echo '<a href="second_server.com/delete.php?file=' . $file['file_name'] . '">Delete</a>';
}
第二台服务器上的文件包含
delete.php
if($_GET['file']){
if(file_exists($_GET['file']){
unlink($_GET['file'];
//file deleted !
}
不,没关系,但是。我想完成这项工作,而不是将我或访客重定向到第二台服务器
例如:ajax或curl或类似的东西。最好的方法是什么?
编辑。
以上代码只是测试。这不是我的真实档案。请帮助处理删除请求的方式,而无需重定向到第二个服务器的PHP文件。
答案 0 :(得分:2)
unset
取消设置变量,它与文件没有任何关系。
您正在寻找unlink
。
unlink
进行一些认真的验证。只是盲目地接受URL中的任何会产生严重的后果。
http://second_server.com/delete.php?file=delete.php
答案 1 :(得分:2)
我认为一个简单的file_get_contents就足够了:
第一台服务器上的文件:
$result = file_get_contents('second-sercer.com/delete.php?file=text.txt&some_security_token=asd');
//From $result you will know what was the result on the other server
第二台服务器上的文件(delete.php);
if($_GET['some_security_token'] == "asd"){
if(file_exists($_GET['file']){
if(unlink($_GET['file'])){
//File deleted we are cool
echo 1;
} else {
//File deletion failed
echo 0;
}
}else{
//File don't exists
echo -1;
}
}else{
//bad token
echo -2;
}
因此,这样您脚本级别的第一台服务器就会转到第二台服务器,这样您就可以在此之前检查参数。第二个服务器发回错误/成功代码,以便您可以在第一台服务器上处理它们:
1 - success
0 - failed deletion
-1 - file doesn't even exists
-2 - bad security token
我没有提供一种方法来创建两个服务器都知道的令牌。您可以使用一些键值来对文件名进行哈希处理,但是您必须使其值得猜测。我只是想指出你也需要这种安全性来使它更安全。而且你必须找到一种方法来保护文件系统不被删除对第二服务器很重要的文件。例如,您只能删除某些文件夹中的文件。
你也可以用同样的方式使用cURl。但是总是尝试在second-server.com上返回first-server.com关于流程的信息
答案 2 :(得分:0)
<a href="/?file=$file_on_second_server">Delete file</a>
<?php if ($foo = $_GET['file']) {
echo "<img src=\"http://second_server.com/delete.php?file=$foo\" style=\"display:none;\"><script>alert('deleted');</script>"; }
?>
答案 3 :(得分:0)
首先,您需要安全代码或令牌等,以便未经授权的人不会从您的服务器中删除文件。
while($file = mysql_fetch_array($files){
echo $file['file_name'];
echo '<a href="first_server.com/delete.php?file=' . $file['file_name'] . '">Delete</a>';
}
并在first_server.com/delete.php中输入:
file_get_contents('second-server.com/delete.php?file=' . $_GET['file'] . '&securitycode=thisisasecuritycode');