Php fopen输出文本+长度字符


Php fopen fputs text + length characters

我不知道出了什么问题,但我所做的是尝试制作一个新的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;