【问题标题】:How to get information on server from xml request from client如何从客户端的 xml 请求中获取有关服务器的信息
【发布时间】:2025-11-28 23:20:02
【问题描述】:

我能否获取来自哪个网站的请求以读取我的 Web 服务器上的 XML 文件,并将此请求中的信息插入数据库?

例如,我想开发一个脚本,当客户在他的服务器上安装我的脚本时,每次他访问他的网站时,他都会调用 simplexml_load_file 来获取是否有新版本的脚本以及如何更新它的信息。我想知道谁有我的剧本。


“盲目”我尝试使用 .htaccess 进行制作,但它没有任何效果 :( 当我调用 text.php 时:

<?php
$myFile = "save.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
$stringData = $_SERVER['REMOTE_ADDR']." : ".$_SERVER['REQUEST_TIME']."\n";

fwrite($fh, $stringData);
fclose($fh);

 $xml = file_get_contents('test.xml');
    header("Content-Type:text/xml");  
    echo $xml;
?>

他让我知道了来自哪个 IP 地址调用的 save.txt 文件信息。我可以知道来电来自哪个网址吗? 以及如何修复调用XML文件而不是php文件?

【问题讨论】:

  • 当然可以。不过我没有你的剧本。我有自己的和属于我工作的公司的人。
  • 我只有一个从服务器读取 xml 文件的函数: public function getVersion() { $url = 'localhost/testserver/latest.xml'; $xml = simplexml_load_file($url); if ($xml->data->version > $this->version) { $this->msgInfo("Info!新版本可用:" . $xml->data->newver,false );但是,我不知道如何遵循此文件所在服务器的要求。

标签: php xml simplexml


【解决方案1】:

也许您想尝试使用超级全局 $_SERVER['HTTP_REFERER']。尝试回显它以查看它包含的内容,您将了解它是如何工作的。将此脚本的链接放在论坛或其他域上,然后单击以查看结果。

要确切知道谁拥有您的脚本,您可以让他们注册(以获取他们的名字),或将域保存在数据库中以便以后作为日志查看(并且可能手动填写有关该特定域的详细信息) 等等等等。

编辑:

我看到您有一个 XML 文件。那么您应该使用 htaccess 并使用不同的脚本处理该请求,并在该脚本中使用 $_SERVER['HTTP_REFERER']。

或者:使它成为一个将被请求的 php 文件。并做所有的事情来保存你需要的信息,比如引用域,并在文件的末尾用你想要的(fread、file_get_contents、文件等)读取真正的xml文件并输出它......如果你有问题,尝试首先使用 header(): http://www.php.net/manual/en/function.header.php 设置标题,让它看起来(和感觉)像一个真正的 xml 文件。我认为正确的标题应该是 text/xml,或者更好:application/rss+xml。

<?php
    file_put_contents('save.txt', $_SERVER['HTTP_REFERER'].PHP_EOL);
    $xml = file_get_contents('test.xml');
    header('application/rss+xml');
    echo $xml;
?>

将文件另存为 test.php

然后制作另一个文件somewhousethescript.html,将它放在同一个文件夹中,在其中放入一个指向test.php的链接(在你使用.htaccess做这件事之后,你应该直接链接到test.xml)。

然后转到 mrakodol.info/someonewhousethescript.html 并点击链接

并查看 save.txt。在那里你很可能会看到 mrakodol.info/someonewhousethescript.html 这就是我认为你想要的。

如果你真的想保留 .xml 的扩展名,你总是可以使用 apache mod-rewrite。如有需要,我会提供样品。

至于扩展名,然后在该文件夹(看起来是网站的根文件夹)中创建一个新文件并将其命名为 .htaccess,并在其中写入以下行:

RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^GET$ [NC]
RewriteRule test.xml test.php [NC]

【讨论】:

  • $_SERVER['HTTP_REFERER'] 放在哪里? XML 文件的链接是:mrakodol.info/test.xml
  • 我按你说的做。有人可以测试一下吗? mrakodol.info/test.php 为什么当我使用 $_SERVER['HTTP_REFERER'] 脚本时没有将任何内容放入 save.txt 文件中?
  • 所以你确实测试了它。结果如何?您必须创建一个简单的 hmtl 文件,并放置一个指向 mrakodol.info/test.php 的链接才能工作。如果你只是在浏览器地址栏中输入它,它不会在那里引用。
  • 好的,我知道了。非常感谢!感谢您的帮助!
  • 很高兴为您提供帮助,如果您还没有,请参阅 .htaccess 示例以保留您的扩展名。
最近更新 更多