【问题标题】:issue uploading files with name containing apostrophe上传文件名称包含撇号的问题
【发布时间】:2014-04-29 11:39:42
【问题描述】:

尝试上传名称中包含撇号的文件时 例如'123'456.jpg'

服务器返回此错误:

内部服务器错误

服务器遇到内部错误或配置错误,无法完成>您的请求。

请通过 webmaster@****.com 联系服务器管理员,告知他们发生此错误的时间,以及您在此错误之前执行的操作。

服务器错误日志中可能会提供有关此错误的更多信息。

此外,在尝试使用 ErrorDocument >处理请求时遇到了 404 Not Found 错误。

我使用的名为“test.php”的 PHP 文件(其中没有 PHP 代码):

<?php
//no php code (error come before it reach the PHP code) 
?>
<form class='panel file hide'  method='post' action='/test.php' enctype='multipart/form-data'>
<input  type='file' name ='file' /> 
<input  type='submit' /> 

</form>

我该如何解决这个问题?

PS:这个问题只出现在虚拟主机服务器上,但是 不会出现在我的本地主机服务器 (xampp) 上。

【问题讨论】:

  • 我只看到 html 部分...处理表单(并复制文件)的 php 部分在哪里。你的错误日志是怎么说的?
  • 对包含名称的变量进行转义。
  • @giorgio 没有 php 代码,它是空的。错误没有 PHP 代码(在到达 PHP 代码之前)
  • 编辑后请看我的回答

标签: php file


【解决方案1】:

您的主机/服务器已激活“mod_security”,
这将默认阻止文件。

尝试联系他们禁用此功能。

【讨论】:

  • 我加了它(有人投了反对票),因为我认为这是一个很可能的问题。但是:海报,请从 apache 错误日志中检索错误,这应该会给你答案
  • 禁用 mod_security 之类的东西对我来说不是一个好主意?!即使我没有尝试看看它是否有效
  • 那就不要上传带撇号的文件
【解决方案2】:

我遇到了类似的问题。我使用了一个函数来验证输入,它为我更正了它。

我用过:

function validateInput($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;   
}

然后使用:

$file_name = validateInput($_FILES['file']);

我希望这对你有用:)

也刚刚注意到:

这里:

<input  type='file' name ='file' /> 

=name

之间有一个空格

【讨论】:

  • 它甚至没有到达 PHP 代码,错误出现在 PHP 代码开始之前
  • 对,在给你发答案之前了解所有事实会很好,让我的答案现在看起来很愚蠢:/ - 你在你的服务器上打开了 PHP 吗?尝试将您的 html 表单更改为具有 " 而不是 ' 因为名称中的 ' 会导致它结束该语句。
  • 另外,您是否因为最初没有提供足够的信息而给我投了反对票,从而得到了错误的回复?糟糕的形式,尤其是当我想帮助你的时候。
  • 我做了你所说的关于 HTML 的事情,但什么也没发生。我不是投你票的人,我不能投反对票我是新用户
  • @user3398690 HTML 什么也没发生是什么意思?你拿出所有的PHP并检查了页面?然后什么都没有加载?对吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多