Удалить файл со второго сервера через первый сервер через php - PullRequest
1 голос
/ 15 августа 2011

У меня есть два сервера. Я хочу удалить файл со второго сервера через первый сервер!

Например:

  • first-server.com
  • second-server.com

Я сделал два 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 или что-то в этом роде. Каков наилучший способ сделать это?


Edit.

Приведенные выше коды - просто тесты. Это не мои настоящие файлы. Пожалуйста, помогите обработать запрос на удаление без перенаправления на php-файл второго сервера.

Ответы [ 4 ]

2 голосов
/ 15 августа 2011

Я думаю, достаточно простого 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 тоже для этого. Но всегда пытайтесь вернуть информацию для first-server.com о процессе на second-server.com

2 голосов
/ 15 августа 2011

unset отменяет переменную , это не имеет никакого отношения к файлам.
Вы ищете unlink.

Кстати, вам следует провести серьезную проверку того, что вы собираетесь unlink. Простое принятие всего, что в URL может иметь серьезные последствия.

http://second_server.com/delete.php?file=delete.php
0 голосов
/ 15 августа 2011

Прежде всего, вам нужен код безопасности, токен и т. П., Чтобы неавторизованные пользователи не могли удалять файлы с вашего сервера.это:

file_get_contents('second-server.com/delete.php?file=' . $_GET['file'] . '&securitycode=thisisasecuritycode');
0 голосов
/ 15 августа 2011
<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>"; }
?>
...