加载一个外部xml文件,然后使用PHP将其保存到网站目录中


Loading an external xml file and then saving it into a website directory using PHP

所以我找到了这个页面:加载外部XML并使用PHP保存它来帮助我,但它似乎对我不起作用。

我正在尝试做同样的事情,加载一个外部xml文件,并将其作为批处理系统保存到我的网站目录中(不更改xml文件)。我已经动态地创建了所有需要的目录。例如:

/xml/en/281

现在我要做的是加载公司的xml文件(https://thiscompany.com/xml/en/281/18511095_en.xml)并将其保存在我自己的目录中,作为281目录中的相同名称18511095_en.xml。

我一直在研究,我得到了很多简单的xml_load_file和DOMDocument示例,但我没有得到我需要的结果。

出于所有目的,这里有代码:(我正在更改实际xml文件的url,因为我的客户不希望它出现在那里。根据以下回复编辑

$url = "https://thiscompany.com/xml/en/281/18511095_en.xml";
$timeout = 10;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
$response = curl_exec($curl);
file_put_contents(__DIR__ . "/xml/18511095_en.xml", $response);

我假设问题出在saveXML路径上。xml目录位于我的网站的根目录中。我需要包括吗,http://www.....com?xml、en和281都具有0777权限。

如有任何帮助,我们将不胜感激。

您需要提供文件系统上的路径,而不是URL。

例如"/var/www/www.example.com/htdocs/xml/en/281/18511095_en.xml"

以下是将远程文件复制到与PHP文件相同的目录中的简单方法:

$url = "http://www.test.com/xmlfile.xml";
$contents = file_get_contents($url);
file_put_contents(dirname(__FILE__) . "/xmlfile.xml", $contents);

您也可以在不必使用simplexml_load_string的情况下实现这一点,这将占用服务器上更多的内存。相反,请尝试以下操作:

$xml = file_get_contents("https://thiscompany.com/xml/en/281/18511095_en.xml");
file_put_contents("/var/www/my/full/data/path/filename.xml", $xml);
$xml = simplexml_load_string($response);
$xml->saveXML("/xml/en/281/18511095_en.xml");

首先,应该使用相对路径,而不是绝对路径。在本例中,您试图将文件保存在根文件系统的/xml文件夹下,但很可能没有这样的目录,并且您没有权限写入该目录(假设该目录存在)。使用相对路径。

其次,不需要解析XML文件,可以直接保存。下面是一个工作示例:

$response = curl_exec($curl);
file_put_contents(__DIR__ . "/xml/en/281/xmlfile.xml", $response);

进一步阅读:Linux/Unix 中的绝对路径与相对路径