我有一个 Windows/Apache2/PHP 应用程序,它使用分块编码接收文件。原因是上传的文件是动态的,传输前不知道长度。这始终开箱即用。
现在我需要将应用程序移植到 IIS7/PHP。 问题是 IIS 无法接收分块文件:上传文件时,服务器根本没有响应。我该如何解决这个问题?
请注意,在我的测试中,我什至没有使用 PHP。我只是有一个 .php 扩展名,因为 IIS 拒绝对 .htm 文件进行 POST(这是有道理的)。
As suggested by rupello in this answer ,我用 cURL 进行了测试,以确保我的客户端没有损坏。 cURL 也无法得到答案,尽管如果传输未分块则一切正常。
我做了以下测试:
测试.php:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
</head>
<body>
<form method="post" enctype="multipart/form-data">
File: <input type="file" name="upfile" />
<input type="submit" value="go"/>
</form>
</body>
</html>
此命令不返回(卡住等待答案)
curl.exe http://serveur/test.php --form "upfile=@text.txt"
-H "Transfer-Encoding: chunked" -H "Expect:"
注意:-H "Expect:"是抑制curl发出的Expect 100-Continue。没有这个标题,结果是一样的,当然除了一个额外的往返。
发送:
POST http://serveur/test.php HTTP/1.1
User-Agent: curl/7.15.3 (i586-pc-mingw32msvc) libcurl/7.15.3 zlib/1.2.2
Host: serveur
Pragma: no-cache
Accept: */*
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: multipart/form-data; boundary=----------------------------310dbcc6761b
8c
------------------------------310dbcc6761b
Content-Disposition: form-data; name="upfile"; filename="text.txt"
Content-Type: text/plain
5
hello
30
------------------------------310dbcc6761b--
0
问题:服务器没有返回任何内容。服务器看起来一直在等待。 curl 不返回。
没有 block 编码的相同命令按预期工作:
已发送:
POST http://serveur/test.php HTTP/1.1
User-Agent: curl/7.15.3 (i586-pc-mingw32msvc) libcurl/7.15.3 zlib/1.2.2
Host: serveur
Pragma: no-cache
Accept: */*
Connection: Keep-Alive
Content-Length: 193
Content-Type: multipart/form-data; boundary=----------------------------e2d761bc173a
------------------------------e2d761bc173a
Content-Disposition: form-data; name="upfile"; filename="text.txt"
Content-Type: text/plain
hello
------------------------------e2d761bc173a--
服务器现在正确回复:
HTTP/1.1 200 OK
Content-Type: text/html
Server: Microsoft-IIS/7.5
X-Powered-By: PHP/5.3.8
X-Powered-By: ASP.NET
Date: Mon, 21 Nov 2011 10:47:57 GMT
Content-Length: 272
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
</head>
<body>
<form method="post" enctype="multipart/form-data">
File: <input type="file" name="upfile" />
<input type="submit" value="go"/>
</form>
</body>
</html>
在具有相同文件和请求的普通 LAMP 服务器上的测试工作正常。
那么如何在 IIS 上启用请求 block 编码?
注意:我试过相关的ASP参数,没有用:
C:\...\inetsrv>appcmd.exe set config /section:asp /enableChunkedEncoding:True
Applied configuration changes to section "system.webServer/asp" for "MACHINE/
WEBROOT/APPHOST" at configuration commit path "MACHINE/WEBROOT/APPHOST"
最佳答案
IIS 7(至少 IIS 7.5)支持分块文件上传。 当 block 长度错误时,IIS 返回 Http 错误 400:请求中存在无效的内容长度或 block 长度。 (例如在添加时替换
5
hello
与
5
h ello
问题出在 CGI 调用从 IIS 到 PHP 的转移。 IIS 似乎并不是 PHP 作为(快速)CGI 无法处理分块文件上传的唯一环境。 参见 PHP-Bugs ID 60826
关于php - IIS7 拒绝分块编码文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8210698/
大家好,我正在尝试设置一个开发环境,并且我一直在关注以下教程:Linktotutorial我做得不是很好,除了最基本的版本控制内容外,我对终端命令没有任何实际经验。我点击了第一个链接并尝试运行source~/.bash_profile我得到了错误;mkdir:/usr/local/rbenv/shims:权限被拒绝mkdir:/usr/local/rbenv/versions:权限被拒绝现在每次我加载终端时都会出现错误。bash_profile的内容;exportPATH=/usr/local/rbenv/bin:$PATHexportRBENV_ROOT=/usr/local/rbe
我正在关注Ryan的RailsCast第339集。我已经安装了rbenv并且可以运行ruby-v。我退出了我的session,当我试图返回时(通过root的sudeployer,我得到了这个错误/home/deployer/.rbenv/bin/rbenv:line20:cd:/root:Permissiondenied这是rbenv文件:#!/usr/bin/envbashset-e[-n"$RBENV_DEBUG"]&&set-xresolve_link(){$(type-pgreadlinkreadlink|head-1)"$1"}abs_dirname(){localcwd="
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我遵循rubyonrails一个应用程序点击部署。数据库做得很好,即使我检查Rails控制台一切正常017/02/2615:34:17[error]18564#0:*31connect()tounix:/var/run/unicorn.sockfailed(111:Connectionrefused)whileconnectingtoupstream,client:121.52.156.57,server:_,request:"GET/HTTP/1.1",upstream:"http://unix:/var/run/unicorn.sock:/",host:"188.166.157
我创建了一个包含自定义gemset的项目特定.rvmrc文件(使用命令rvm--rvmrc--create1.9.2@registration):#excerptof.rvmrc...environment_id="ruby-1.9.2@registration"if[[-d"${rvm_path:-$HOME/.rvm}/environments"\&&-s"${rvm_path:-$HOME/.rvm}/environments/$environment_id"]]then\."${rvm_path:-$HOME/.rvm}/environments/$environment_id
给定一个Ruby数组ary1,我想生成另一个数组ary2,它具有与ary1相同的元素,除了那些在一组给定的ary1索引处。我可以将这个功能猴子修补到Ruby的Array类上classArraydefreject_at(*indices)copy=Array.new(self)indices.uniq.sort.reverse_eachdo|i|copy.delete_atiendreturncopyendend然后我可以像这样使用它:ary1=[:a,:b,:c,:d,:e]ary2=ary1.reject_at(2,4)puts(ary2.to_s)#[:a,:b,:d]虽然这很好用
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?
我很确定Ruby有这些(等同于__call、__get和__set),否则find_by将如何在Rails中工作?也许有人可以举一个简单的例子来说明如何定义与find_by相同的方法?谢谢 最佳答案 简而言之你可以映射__调用带有参数的method_missing调用__设置为方法名称以'='结尾的method_missing调用__获取不带任何参数的method_missing调用__调用PHPclassMethodTest{publicfunction__call($name,$arguments){echo"Callingob
Lisp是否适合Web编程/应用程序(交互式),就像ruby和php一样?需要考虑的事情是:易于使用可部署性难度(尤其是对于编程初学者而言)(编辑)在阅读PaulGraham'sessay之后,我特别提到了CommonLisp.将是我的第一门编程语言。在这方面。这样做合适吗?我听说Clojure的宏功能不如CommonLisp的强大,这就是我尝试学习Clojure的原因。它教授编程并且非常强大。 最佳答案 Lisp是一个语系,而不是单一的语言。为了稍微回答您的问题,是的,存在用于各种Lisp方言的Web框架,例如用于Common
我是Ruby的新手..正在按照TeamTreehouse上的说明在OSX(Yosemite)上安装Ruby开发环境。当我到达创建测试应用程序的步骤时。它最终失败了。权限被拒绝。:(不确定我做错了什么,我确实尝试运行geminstalldebuginspector和bundleexecspringbinstubball但它们都失败了。[]railsnewtestappcreatecreateREADME.rdoccreateRakefilecreateconfig.rucreate.gitignorecreateGemfilecreateappcreateapp/assets/javas