向 fwrite / fopen / fclose 进程添加内容头

Posted

技术标签:

【中文标题】向 fwrite / fopen / fclose 进程添加内容头【英文标题】:Add content header to fwrite / fopen / fclose process 【发布时间】:2013-01-21 07:06:18 【问题描述】:

我正在写入一个 .json 文件,我需要包含标题,这样我就可以毫无问题地访问它。我需要添加到 index.php 文件的标题:

header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');

创建.json文件的代码sn-p是:

public function saveCalendarAsFile() 
    $file2 = fopen("$this->name.txt", 'w');
    fwrite($file2, json_encode($this->events));
    fclose($file2);
    

public function saveCalendarAsFile() 
    $file2 = fopen("$this->name.json", 'w');
    fwrite($file2, json_encode($this->events));
    fclose($file2);

无论我将标题放在哪里(在第 1、2 或 3 行之前,正如this post 所建议的那样),它都不会更改外部文件的 HTTP 响应(目前它被列为 text/plain)。

php 文件在文档中具有相同的标题,但根据那里的多个帖子,它需要位于“echo”语句之前。由于我的代码没有使用 echo 语句(因为我正在写入外部文件),所以必须在另一个地方放置标题,这样它就会影响 .json 文件。提前致谢。

【问题讨论】:

您不能将标题写入文件。标头需要由以后通过 HTTP 提供此文件的任何人设置,可能是网络服务器。 有几篇文章说您可以将标题写入文件。示例:***.com/questions/398237/how-to-use-the-csv-mime-type。我错过了什么吗? @dbalram 这个问题是将文本输出到浏览器,而不是保存文件。 当前有问题的函数从一个数组中生成多个 .txt 文件。我已经用完整的功能和它当前创建的文件的屏幕截图更新了原始问题。 【参考方案1】:

在服务器上保存目标文件时无需设置标题,但是,如果您希望能够访问该文件(跨域),则需要设置 Access-Control-Allow-Origin(确切地说当您从服务器请求该文件时)。

在您的情况下:您在服务器上保存了 json 文件 $this->name.json,如果您想接收该文件并设置 (Access-Control-Allow-Origin) 那么您需要使用读取该文件PHP然后设置header例如:

考虑文件名是:myjson.json 那么你不能直接请求那个文件,用php读取文件然后输出:

jsonnreador.php
<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
echo file_get_contents('myjson.json');
?>

【讨论】:

以上是关于向 fwrite / fopen / fclose 进程添加内容头的主要内容,如果未能解决你的问题,请参考以下文章

php

在matlab中如何把两个txt文件合并到一起

php 基础2

在VC++中用fopen

fwrite(&st[i],sizeof(struct staff),1,fp)!=1啥意思

文件操作