Я пытаюсь передать ключ через $ _SERVER ['HTTP_REFERER'] (установленный через cURL) с одного сервера на другой, чтобы затем обработать некоторые данные POST и отправить файл XML обратно. У меня есть ключ, хранящийся в одинаковых файлах на обоих серверах (чередование их через SCP-задание cron), но когда я читаю ключ на принимающей стороне и сравниваю его с реферером, он каждый раз выходит из строя и возвращает 418 мне.
Если я использую if($refkey = "mykeyhere")
вместо if($refkey = $key)
, он работает правильно, но очевидно, что жесткое кодирование их ключа здесь не сработает - мне нужно иметь возможность прочитать его из файла.
Я попытался использовать strstr()
, выполняя приведение с (string)$key
, однако gettype()
для обоих возвращает строку, поэтому она должна работать. Ключ отправляется должным образом в $ _SERVER ['HTTP_REFERER'] и правильно читается из файла на принимающей стороне, я повторил оба, и они идентичны. Кто-нибудь знает, почему сравнение не получится, я что-то делаю глупо и, очевидно, неправильно? Спасибо.
Код сборки запроса cURL:
$file = "key";
$fh = fopen($file, 'r');
$key = fread($fh, filesize($file));
fclose($fh);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://example.com/xmlreq.php");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_REFERER, $key);
curl_setopt($ch, CURLOPT_POSTFIELDS, "greeting=hello" );
curl_exec($ch);
curl_close($ch);
получение кода (xmlreq.php):
if($_SERVER['REQUEST_METHOD'] === "POST" ){
$file = "key";
$fh = fopen($file, "r");
$key = fread($fh, filesize($file));
fclose($fh);
$refkey = $_SERVER['HTTP_REFERER'];
if($refkey == $key){
print_r("hello, world!"); // it should run this
}else
header("HTTP/1.0 418 I'm a teapot"); // but runs this instead
}else
header("HTTP/1.0 404 Not Found");