Php fopen fputs text + length characters

时间:2015-09-03 13:05:49

标签: php xml fopen

我没有看到wat出错,但我做的是尝试创建一个新的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>

但它包含在我文件的最后,charachters的长度,如:

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

3 个答案:

答案 0 :(得分:0)

我认为对这个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);

答案 1 :(得分:0)

如何在根目录上创建文件并使用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";
    }
}

答案 2 :(得分:0)

我发现了问题,当我从服务器下载文件时,它必须这样做。 在服务器上,文件已正确保存,但在我下载时则没有。

这是因为我做了:     $响应 - &GT; setContent(ReadFile的($文件路径));

这不适用于xml,我将其更改为:

 componentDidMount: function(){
    var geo = navigator.geolocation;
    var positionOptions = {
      enableHighAccuracy: true,
      timeout: 3000,
      maximumAge: 0,
    };
    var success = function(position){
      this.setState({
        region: {
          latitude: position.coords.latitude,
          longitude: position.coords.longitude,
        },
      });
    };
    var error = function(error){
      alert('error watchposition:', error.code);
    };
    var watchID = geo.watchPosition(success, error, positionOptions);
    // geo.getCurrentPosition(success, error, positionOptions);
  },