PHP 上传 - 500 内部服务器错误

2023-11-27

问题

上传大约 8MB 或以上的文件时,我收到 500 内部服务器错误。

  1. 所有 PHP 设置位于php.ini是正确的
  2. maxAllowedContentLength已在 web.config 中设置

服务器信息

人们或许可以从maxAllowedContentLength, 我在跑步IIS 7.5,使用 FastCGI 和 PHP 5.3.17

附加信息

我尝试了很多不同的方法来使其正常工作,但就是找不到问题所在。

但是,我发现以下信息可能有助于找出此问题的根源:

  1. 当使用服务器上的 Media Wiki 上传文件(较大的文件)时,我收到相同的错误,这表明这不是我的代码中的错误。
  2. 最重要的是- 我成功地在 Plesk 文件管理器中上传了一个 18MB 的文件,这显然意味着 Plesk 能够解决这个配置问题。我尝试将所有 Plesk 控制面板设置复制到 IIS 中的该域,但这似乎不起作用。
  3. 正如我尝试编写的那样,在执行脚本之前返回错误exit;尝试获取空白屏幕,但这会被忽略并返回 500 错误。

我认为问题出在configure commandPHP 配置的一部分,因为当我更改处理程序映射时.php使用 Plesk 的文件php-cgi.exe我没有收到 500 内部错误,而不是通常的错误。话虽如此,我不能将其保留在这个 PHP 版本上,因为它是 Plesk 自己的exe还有其他配置问题。

我认为这可能与配置命令有关,只是因为这与一个命令有很大不同phpinfo()到另一个。

如果您有任何想法或建议,请留言。据我所知,我已经尝试了一切,但似乎无法解决这个问题。如果是 Linux 就好了...

提前致谢

UPDATE 1

忘记添加,PHP 错误日志中没有返回任何错误。至于IIS错误,我不知道去哪里找

UPDATE 2

这就是我放在我的web.config file:

<security>
    <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483647" /> 
    </requestFiltering>
</security>

UPDATE 3

在您的帮助下,我们成功地解决了 IIS 显示的错误。这就是我收到的:

PHP 警告:POST 内容长度 12221448 字节超出限制 第 0 行未知,共 8388608 字节

这与post_max_size?

UPDATE 4

PHP设置如下(来自phpinfo()):

post_max_size = 64M
memory_limit = 128M
max_file_uploads = 20
max_execution_time = 6000
upload_max_filesize = 64M

UPDATE 5

最后,以防万一任何人都可以发现任何潜在的问题,Plesk 完全可以上传大文件,所以我假设他们的 php-cgi.exe 的编译方式不同。当我读到他们的配置的 phpinfo() 时configure command信息有很大不同:

我的配置:

cscript /nologo configure.js“--​​enable-snapshot-build” “--disable-isapi” “--enable-debug-pack” “--without-mssql” “--没有-pdo-mssql”“--没有-pi3web” “--with-pdo-oci=C:\php-sdk\oracle\instantclient10\sdk,共享” “--with-oci8=C:\php-sdk\oracle\instantclient10\sdk,共享” “--with-oci8-11g=C:\php-sdk\oracle\instantclient11\sdk,共享” “--enable-object-out-dir=../obj/”“--enable-com-dotnet=共享” “--with-mcrypt=static” “--disable-static-analyze”

Plesk 的配置:

cscript /nologo configure.js “--enable-debug-pack” “--enable-cli” “--enable-cgi” “--enable-isapi” “--enable-one-shot” “--enable-pdo” “--enable-intl” “--with-openssl=共享” “--with-pdo-odbc” “--with-iconv” “--with-xml” “--with-xsl” “--with-mysql” “--with-mysqlnd” “--with-mysqli” “--with-pdo-sqlite” “--with-pdo-mysql” “--with-curl=共享” “--enable-mbstring” “--enable-mbregex”“--with-imap=共享”“--enable-sockets” “--启用shmop”“--启用soap”

更新(答案)这非常奇怪,因为phpinfo()info 说的是一件事,但它显然被忽略了,不知道为什么。

如果我改变post_max_size在 Plesk 中,对于该特定域/子域,则不会发生任何更改(尽管在phpinfo())。但是,如果我真的改变了post_max_value在 php.ini 中,这解决了问题。

这不是解决此问题的好方法,因为当 Plesk 更新时,php.ini 会随着 PHP 更新而被覆盖,从而导致对 php.ini 所做的更改丢失。这意味着每次 Plesk 更新时我都需要对 php.ini 进行更改。这就是为什么 Plesk 提供了无需更改 php.ini 即可更改 PHP 设置的功能。

有人能想到为什么 PHP 忽略本地值并恢复到 php.ini 中的值,即使 php.ini 声明本地值不同?


如果你看一下PHP的源代码,你可以在文件上看到php-5.4.8-src\main\rfc1867.c第 706-709 行:

if (SG(post_max_size) > 0 && SG(request_info).content_length > SG(post_max_size)) {
    sapi_module.sapi_error(E_WARNING, "POST Content-Length of %ld bytes exceeds the limit of %ld bytes", SG(request_info).content_length, SG(post_max_size));
    return;
}

文件中也有同样的内容php-5.4.8-src\main\SAPI.c。 所以,消息PHP Warning: POST Content-Length of 12221448 bytes exceeds the limit of 8388608 bytes in Unknown on line 0关于 post_max_size 设置。您已通过使用 phpinfo() 确认您已正确配置此设置,但无论如何它似乎都使用默认值 8M。

至于为什么,请看这个线程:

事实证明,在 Windows 上,您只能设置以下 ini 指令: 标记的PHP_INI_USER每个目录。很遗憾,upload_max_filesize and post_max_size都是PHP_INI_PERDIR。 来自 PHP 文档http://php.net/manual/en/configuration.changes.php

对于从此目录或其任何子目录运行的任何脚本,该目录的设置都将处于活动状态。价值 键下应该有 PHP 配置指令的名称 和字符串值。不解析值中的 PHP 常量。但是,只有 PHP_INI_USER 中可更改的配置值可以这样设置,而 PHP_INI_PERDIR 值则不能。

因此,即使 Plesk 有一个可以更改这些指令的界面,并且 虽然phpinfo()注意到他们,他们没有做任何改变 实际最大上传大小。Plesk 不应允许您进行更改 Windows 上的那些,以及phpinfo()不应报告更改,但 你能做什么。

所以,它是 post_max_size,需要在 php.ini 上设置。即使 phpinfo 另有说明,Plesk 设置根本不起作用。我也开了一个错误条目关于 phpinfo 行为,因为似乎没有它的条目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 上传 - 500 内部服务器错误 的相关文章

  • 使用 PHP 创建图表并导出为 PDF

    我正在寻找有关使用 PHP 创建图表的建议 我还希望能够将这些图表导出到 PDF 文档 我目前正在使用谷歌图表 但我不喜欢将我的所有信息发送到谷歌的想法 我更喜欢自己的托管解决方案 我见过很多 Flash 解决方案 但我不知道有什么方法可以
  • __callStatic():从静态上下文实例化对象?

    我对 PHP 中的 静态 和 动态 函数和对象如何协同工作感到困惑 特别是在 callStatic 方面 callStatic 的工作原理 您可以有一个普通的班级 MyClass 在班级内您可以 放置一个名为 callStatic 的静态函
  • PHPExcel下载文件

    我想下载使用 PHPExcel 生成的 Excel 文件 我按照以下代码PHPExcel 强制下载问题 https stackoverflow com questions 26265108 phpexcel force download i
  • 压缩 zend Framework 2 的 html 输出

    我目前正在 PHP 5 4 4 上使用 Zend Framework 2 beta 开发个人 web 应用程序以用于自学目的 我想知道是否可以在 html 输出发送到浏览器之前拦截它 以便通过删除所有不必要的空格来缩小它 我怎样才能在ZF2
  • Laravel 5.1 中的VerifyCsrfToken.php 第 53 行:(Firefox 浏览器)中出现 TokenMismatchException?

    我试图找出为什么会出现这个错误 即使它是全新安装的 我在我的项目中遇到了这个错误 所以我用谷歌搜索 没有一个答案对我有用 所以我创建了新项目并复制了所有控制器 视图和模型 几个小时后工作正常 再次出现令牌不匹配错误 为什么在 laravel
  • Laravel - 停止并发访问记录

    在 Laravel 中 有什么方法可以停止同时与同一条记录交互 例如 如果用户 A 正在编辑一条记录 那么我同时需要阻止用户 B 编辑同一条记录 注意 我在 Laravel 5 2 中使用 SESSION DRIVER file 目前大约有
  • PHP解析xml文件错误

    我正在尝试使用 simpleXML 来获取数据http rates fxcm com RatesXML http rates fxcm com RatesXML Using simplexml load file 我有时会遇到错误 因为这个
  • 关于加拿大短信网关提供商的建议[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我很好奇 如果我能够接受传入的短信到某个号码 然后将其传递给 PHP 中的服务器端应用程序 会带来多少麻烦 金钱 我最终会通过电子邮件地址发回短信 有
  • 重复使用相同的卷曲手柄。性能大幅提升?

    在 PHP 脚本中 我对不同的 URL 执行了许多不同的curl GET 请求 一百个 将重复使用来自curl init提高性能 还是与请求的响应时间相比可以忽略不计 我这么问是因为在当前的架构中保持相同的句柄并不容易 交叉发布自我应该关闭
  • session_regenerate_id 没有创建新的会话 id

    我有一个脚本 旨在完成当前会话并开始新的会话 我使用了一段代码 它在我的开发计算机上运行良好 但是 当我将其发布到生产服务器时 会话 ID 始终保持不变 以下是我重新启动会话的代码 session start SESSION array P
  • 具有动态表单名称的 form_widget

    在我的 Twig 模板中 我有一个 FOR 循环 它创建多个表单 如下所示 for thing in things set form id myform thing Id set form name attribute form myfor
  • 使用 PHP 将值插入可编辑 PDF,并保持可编辑状态

    我有一个带有可编辑字段的 PDF 我希望将 HTML 表单中的值传递到此 PDF 中 我尝试过使用 FPDF 并且它有效 但是将值传递到 PDF 后 pdf 中的字段不再可编辑 另一个缺点是 在将值传递到 PDF 时 我们必须为每个字段指定
  • Laravel 5.2 带有可变参数的命名路由用法

    我有这样的路线 Open New Subscription page Route get account subscriptions create menu uses gt Subscriptions SubscriptionControl
  • PHP 中的 NOW() 函数

    是否有 PHP 函数以与 MySQL 函数相同的格式返回日期和时间NOW 我知道如何使用date 但我想问是否有专门用于此的功能 例如 返回 2009 12 01 00 00 00 您可以使用date https www php net m
  • PHP7构造函数类名

    我有一个 Laravel 4 2 应用程序 它可以与 PHP5 一起使用 没有任何问题 由于我安装了一个运行 PHP7 的新 vagrant box 一旦我运行一个模型 其中函数名称与类名称 关系函数 相同 就会出现错误 如下所示
  • Android GCM 服务器的 API 密钥

    我有点困惑我应该为 GCM 服务器使用哪个 API 密钥 在文档中它说使用 android api 密钥 这对我不起作用并且总是给出未经授权的 http developer android com google gcm gs html ht
  • 使用PHP套接字发送和接收数据

    我正在尝试通过 PHP 套接字发送和接收数据 一切正常 但是当我尝试发送数据时 PHP 不发送任何内容 Wireshark 告诉我发送的数据长度为 0 我正在使用这段代码
  • PHP文件上传

    如果我想在文件名转到服务器的永久位置 而不是临时位置 之前更改文件名 我该如何执行此操作 代码如下
  • 为什么 PHP 中不允许“传统”类型提示?

    刚刚发现类型提示 http php net manual en language oop5 typehinting phpPHP 中允许 但不适用于整数 字符串 布尔值或浮点数 为什么 PHP 不允许对整数 字符串等类型进行类型提示 从 P
  • PHP cURL 在本地工作,在 AWS 服务器上出现错误 77

    最新更新 脚本作为管理员用户通过 SSH shell 作为 php script php 成功运行 当由 nginx 用户运行时 curl 命令无法执行 https 请求 所以我猜测这是nginx用户无法正确使用curl的问题 我已经检查了

随机推荐