Есть ли эквивалент TCL для функции чтения файлов php? - PullRequest
3 голосов
/ 20 сентября 2011

Ситуация: Представьте себе два сервера A и B. Сервер B просто выводит файл PDF, в котором приятно отображается информация, полученная из любой строки XML, переданной ему через параметр url.Задача сервера A состоит в том, чтобы создать строку xml, добавить эту строку xml к URL-адресу (указывающему на код на сервере B) в качестве параметра, а затем вызвать URL-адрес с помощью функции readfile () php ...

Вопрос: Есть ли способ сделать то же самое (чтение файла на удаленном сервере и вывод в браузер) в TCL?

Ответы [ 2 ]

3 голосов
/ 20 сентября 2011

Эквивалентом файла чтения TCL является файл http://www.tcl.tk/man/tcl8.6/TclCmd/file.htm

Однако, похоже, что функция чтения PHP-файлов имеет опцию чтения файла с URL-адреса , если включены обёртки fopen http://php.net/manual/en/function.readfile.php

Так что в этом случае вам нужно использовать HTTP-клиент . Попробуйте это http://www.tcl.tk/man/tcl8.6/TclCmd/http.htm, и здесь есть пример того, как использовать это http://wiki.tcl.tk/24061

2 голосов
/ 21 сентября 2011

Если ваш скрипт выполняет вывод на своем канале stdout (или притворяется), то вы можете использовать некоторые дополнительные приемы из пакета http Tcl, чтобы хранить данные на уровне ОС, а не перетаскивать их через код напрямую:

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

Предполагается, что выборка с удаленного хоста является POST, поэтому подходит обработка по умолчанию опции -query.Так как мы посылаем тело в нашем запросе, это не GET (и это точно не PUT…)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...