【问题标题】:PHP document upload form - error messagePHP 文档上传表单 - 错误信息
【发布时间】:2012-11-16 17:16:50
【问题描述】:

我在创建的 PHP 文档上传表单上收到以下消息:

警告:fread():提供的参数不是有效的流资源

/home/admin/upload.php 第 129 行

警告:fread():提供的参数不是有效的流资源

/home/admin/upload.php 第 131 行

这是我的代码,第 129 和 131 行被注释:

<?
if(isset($_POST['upload']))
{
        $fileName = $_FILES['userfile']['name'];
        $tmpName  = $_FILES['userfile']['tmp_name'];
        $fileSize = $_FILES['userfile']['size'];
        $fileType = $_FILES['userfile']['type'];

        $fp = fopen($tmpName, 'r');
            $content = fread($fp, $fileSize); //Line 129
        $content = addslashes($content);
                fclose($fp); //Line 131

        if(!get_magic_quotes_gpc())
        {
            $fileName = addslashes($fileName);
        }
        $fileName = str_replace(' ','_',$fileName);

        //MySQL Database Connect
include '../includes/dblogin.php';


        $query = "INSERT INTO upload_min (name, size, type, content, types ) ".
                 "VALUES ('$fileName', '$fileSize', '$fileType', '$content', 'minutes')";

        mysql_query($query) or die('Error, query failed');                  

        echo "<p align='center'>File $fileName uploaded</p> <p align='center'><a href='index.php'>Go back to Admin</a></p>";
}       
?>

我的用户只上传 MS Word 文档。所以我不知道是不是因为文件名可能太长了......

我有一个页面调用 dbase 并显示文件,并且有 .doc 和 .docx 文件....所以我认为文件扩展名不是问题...另外我刚刚上传了一个 .pdf 文件和它工作得很好......

有人吗?

【问题讨论】:

  • 你的真实代码中没有这个@ 符号吗?
  • 什么@符号?但不,我的代码中没有 @ 符号。但是,当我尝试从显示页面下载它们时,我确实发现上传 .docx 文档似乎会损坏它们.... docx 不是公认的文件扩展名吗?
  • 可能是服务器不支持该文件扩展名,因此不是有效的流资源?

标签: php


【解决方案1】:

您是否尝试过 var_dump-ing $_FILES 超全局变量?那里实际上有文件名吗?您是否在表单中设置了enctype="multipart/form-data"

此外,您的第一行应该更像:

if (isset($_FILES['userfile']) && $_FILES['userfile']['error'] == 0)

编辑:

另外,我真的希望您在将 $content 和所有其他变量插入数据库之前对其进行转义。

【讨论】:

  • 是的,enctype 在那里。是的,文件名在那里。该文件被放入 dbase,我可以在我调用它的显示页面上看到它。我什至可以单击链接并下载它,但是 .docx 文件说它们已损坏......所以从我的表单到服务器的某个地方,有些东西不起作用。很模糊吧?
  • 那么你的整个帖子完全是误导。上传完全没有问题。您的问题应该是“上传的文件在数据库中损坏”。或者其他的东西。查看我的编辑。
  • 你的编辑部分有什么废话?擦拭它。你剩下的答案是完美的
  • @netcoder - 首先我很抱歉没有清楚地解释我的问题。我在 PHP 上还是相当新的。然后我的行也会这样读: $content = file_get_contents($fp, $filesize); ?
  • @Tony 事实上,如果您收到该错误消息,则不可能将您的文件保存在数据库中。先把事情整理好。
【解决方案2】:

检查 PHP ini 的这些变量 * 文件上传 * 上传最大文件大小 * 最大输入时间 * 内存限制 * max_execution_time * post_max_size

第一个很明显,如果您将其设置为关闭,则您的安装将禁用上传。

http://www.radinks.com/upload/config.php

在正确配置 ini 之后。打印 $_FILE 变量。 很可能文件路径错误,文件不可读。

还要检查权限。

http://www.w3schools.com/PHP/php_file_upload.asp

【讨论】:

    【解决方案3】:

    错误的文件是否大于 php.ini 中的 upload_max_filesize 参数?

    【讨论】:

    • 我的 php.ini 文件中没有 upload_max_filesize 参数...不知道这是必要的...
    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多