所以我找到了这个页面: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权限。
任何帮助都将不胜感激。
答案 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);