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

时间:2015-07-01 18:34:09

标签: php xml

所以我找到了这个页面:Load external XML and save it using PHP来帮助我,但它似乎不适合我。

我试图通过加载外部xml文件并将其保存(不更改xml文件)作为批处理系统进入我的网站目录来尝试做同样的事情。我已经动态创建了所需的所有目录。 例如:

/xml/en/281

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

我一直在研究,我收到了很多simplexml_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权限。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:0)

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

e.g。 "/var/www/www.example.com/htdocs/xml/en/281/18511095_en.xml"

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您也可以在不使用simplexml_load_string的情况下完成此操作,而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);

答案 3 :(得分:0)

$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);

进一步阅读:Absloute path vs relative path in Linux/Unix