我不知道出了什么问题,但我所做的是尝试制作一个新的xml文件。这是我的测试代码:
$filename = "my_xml_file_".date("Y_m_d_His").".xml";
$path = $this->get('kernel')->getRootDir().'/../mydirectory/'. $filename;
$fd = fopen ($path, "w");
fputs($fd, '<xml><test></test></xml>');
fclose($fd);
我的文件应该只包含:
<xml><test></test></xml>
但它包含在我的文件的末尾,字符的长度,如:
<xml><test></test></xml>24
当我这样做时:
$filename = "my_xml_file_".date("Y_m_d_His").".xml";
$path = $this->get('kernel')->getRootDir().'/../mydirectory/'. $filename;
$fd = fopen ($path, "w");
fputs($fd, '');
fclose($fd);
文件只包含以下内容:0
我忽略了什么没有得到字符的长度在我的xml文件?谢谢。
文件正确保存,但当我用ajax调用下载时发生变化:
$filePath = $this->get('kernel')->getRootDir().'/../mydirectory/'.$filename;
$extension = explode('.', $filename);
$extension = end($extension);
if (!is_file($filePath)) {
// file does not exist
echo "file does not exist: " . $filePath;
exit();
}
$response = new Response();
// Set headers
$response->setStatusCode(200);
$response->headers->set('Cache-Control', 'private');
if($extension == 'csv'):
$response->headers->set('Content-Type', 'text/csv');
elseif($extension == 'xml'):
$response->headers->set('Content-Type', 'text/xml');
else:
header('Content-type: application/json');
endif;
$response->headers->set('Content-Disposition', 'attachment; filename="' . basename($filePath) . '";');
$response->headers->set('Content-length', filesize($filePath));
$response->sendHeaders();
$response->setContent(readfile($filePath));
return $response;
如何在根目录上创建文件并使用php rename函数将其移动到您的目录中?
确保你的$path
是正确的。
$filename = "my_xml_file_" . date("Y_m_d_His") . ".xml";
$fd = fopen($filename, "w");
fputs($fd, '<xml><test></test></xml>');
if(fclose($fd)) {
$path = $_SERVER["DOCUMENT_ROOT"].'/mydirectory/';
if(rename($filename,$path.$filename)) {
echo "move";
} else {
echo "not move";
}
}
我认为对这个kernel
家伙的调用在文件写缓冲区中引起了一些值。在写入文件之前,请做以下操作:
fflush($file);
的例子:
$filename = "my_xml_file_".date("Y_m_d_His").".xml";
$path = $this->get('kernel')->getRootDir().'/../mydirectory/'. $filename;
$fd = fopen ($path, "w");
fflush($fd);
fputs($fd, '<xml><test></test></xml>');
fclose($fd);
我发现了问题,当我从服务器下载文件时必须这样做。在服务器上,文件被正确保存,但当我下载它时却没有。
这是因为我做了:反应-> setContent (readfile (filePath美元));
这对xml不起作用,我把它改成:
if($extension == 'xml'):
$doc = new 'DOMDocument();
$doc->load($filePath);
$response->setContent($doc->saveXML());
else:
$response->setContent(readfile($filePath));
endif;