Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于php';s readfile函数?_Php_Xml_Tcl - Fatal编程技术网

对于php';s readfile函数?

对于php';s readfile函数?,php,xml,tcl,Php,Xml,Tcl,情况: 设想两台服务器A和B。服务器B只输出一个PDF文件,该文件可以很好地显示从通过url参数传递给它的任何xml字符串检索到的信息。服务器A的工作是构建一个xml字符串,将该xml字符串作为参数附加到url(指向服务器B上的代码),然后使用php的readfile()函数调用url 问题: 在TCL中是否有同样的方法(在远程服务器上读取文件并输出到浏览器?TCL读取文件等效于文件 但是,如果启用了fopen包装器,那么PHP readfile函数似乎有一个从URL读取文件的选项 因此,在这种

情况:
设想两台服务器A和B。服务器B只输出一个PDF文件,该文件可以很好地显示从通过url参数传递给它的任何xml字符串检索到的信息。服务器A的工作是构建一个xml字符串,将该xml字符串作为参数附加到url(指向服务器B上的代码),然后使用php的readfile()函数调用url

问题:

在TCL中是否有同样的方法(在远程服务器上读取文件并输出到浏览器?

TCL读取文件等效于文件

但是,如果启用了fopen包装器,那么PHP readfile函数似乎有一个从URL读取文件的选项


因此,在这种情况下,您需要使用HTTP客户端。试一试,这里有一个如何使用它的示例

如果您的脚本在其标准输出通道(或假装)上进行输出,那么您可以使用Tcl http包的一些额外技巧,以便将数据保留在操作系统层,而不是直接在代码中拖动:

package require http 2

set url "http://example.org/getpdf/fromxml"
set data "<example>this might be your xml</example>"

# Generate headers, based on example from PHP readfile() page
puts "Content-Description: File Transfer"
puts "Content-Type: application/pdf"
puts "Content-Disposition: attachment; filename=example.pdf"
puts "Content-Transfer-Encoding: binary"
puts "Expires: 0"
puts "Cache-Control: must-revalidate, post-check=0, pre-check=0"
puts "Pragma: public"
# No content length; data streamed from elsewhere
puts "";    # End of headers!

set tok [http::geturl $url -query $data -type text/xml -channel stdout]
# You ought to check for errors here I suppose...
http::cleanup $tok
包需要http 2
设置url“http://example.org/getpdf/fromxml"
设置数据“这可能是您的xml”
#根据PHP readfile()页面中的示例生成标题
放入“内容描述:文件传输”
放入“内容类型:应用程序/pdf”
放置“内容处置:附件;文件名=example.pdf”
放入“内容传输编码:二进制”
放入“过期:0”
放置“缓存控制:必须重新验证,后检查=0,预检查=0”
将“Pragma:public”放入
#无内容长度;从别处传来的数据
将“;#标题结束!
set tok[http::geturl$url-query$data-type text/xml-channel stdout]
#我想你应该在这里检查错误。。。
http::cleanup$tok

这是假设从远程主机获取是POST,因此
-query
选项的默认处理是合适的。因为我们在请求中发送了一个实体,所以它不是GET(也肯定不是PUT…)

非常有用的答案。谢谢。我想说的是,Tcl确实将该功能分解为各个部分(即,
open
read
/
fcopy
)。