【问题标题】:Fatal error: Call to undefined function finfo_open() in php [duplicate]致命错误:在 php 中调用未定义的函数 finfo_open() [重复]
【发布时间】:2014-11-22 05:48:25
【问题描述】:

我是 php 新手,我创建了用于将图像上传到 sql 数据库并使用 php 检索图像的代码。

这是我的代码:

<html>
<head><title>File Insert</title></head>
<body>
<h3>Please Choose a File and click Submit</h3>

<form enctype="multipart/form-data" action=
"<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="10000000" />
<input name="userfile" type="file" />
<input type="submit" value="Submit" />
</form>

<?php

// check if a file was submitted
if(!isset($_FILES['userfile']))
{
    echo '<p>Please select a file</p>';
}
else
{
    try {
    $msg= upload();  //this will upload your image
    echo $msg;  //Message showing success or failure.
    }
    catch(Exception $e) {
    echo $e->getMessage();
    echo 'Sorry, could not upload file';
    }
}

// the upload function

function upload() {
    include "mysqlconnect.php";
    $maxsize = 10000000; //set to approx 10 MB

    //check associated error code
    if($_FILES['userfile']['error']==UPLOAD_ERR_OK) {

        //check whether file is uploaded with HTTP POST
        if(is_uploaded_file($_FILES['userfile']['tmp_name'])) {    

            //checks size of uploaded image on server side
            if( $_FILES['userfile']['size'] < $maxsize) {  

               //checks whether uploaded file is of image type
              //if(strpos(mime_content_type($_FILES['userfile']['tmp_name']),"image")===0) {
                 $finfo = finfo_open(FILEINFO_MIME_TYPE);
                if(strpos(finfo_file($finfo, $_FILES['userfile']['tmp_name']),"image")===0) {    

                    // prepare the image for insertion
                    $imgData =addslashes (file_get_contents($_FILES['userfile']['tmp_name']));

                    // put the image in the db...
                    // database connection
                    mysql_connect($host, $user, $pass) OR DIE (mysql_error());

                    // select the db
                    mysql_select_db ($db) OR DIE ("Unable to select db".mysql_error());

                    // our sql query
                    $sql = "INSERT INTO test_image
                    (image, name)
                    VALUES
                    ('{$imgData}', '{$_FILES['userfile']['name']}');";

                    // insert the image
                    mysql_query($sql) or die("Error in Query: " . mysql_error());
                    $msg='<p>Image successfully saved in database with id ='. mysql_insert_id().' </p>';
                }
                else
                    $msg="<p>Uploaded file is not an image.</p>";
            }
             else {
                // if the file is not less than the maximum allowed, print an error
                $msg='<div>File exceeds the Maximum File limit</div>
                <div>Maximum File limit is '.$maxsize.' bytes</div>
                <div>File '.$_FILES['userfile']['name'].' is '.$_FILES['userfile']['size'].
                ' bytes</div><hr />';
                }
        }
        else
            $msg="File not uploaded successfully.";

    }
    else {
        $msg= file_upload_error_message($_FILES['userfile']['error']);
    }
    return $msg;
}

// Function to return error message based on error code

function file_upload_error_message($error_code) {
    switch ($error_code) {
        case UPLOAD_ERR_INI_SIZE:
            return 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
        case UPLOAD_ERR_FORM_SIZE:
            return 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
        case UPLOAD_ERR_PARTIAL:
            return 'The uploaded file was only partially uploaded';
        case UPLOAD_ERR_NO_FILE:
            return 'No file was uploaded';
        case UPLOAD_ERR_NO_TMP_DIR:
            return 'Missing a temporary folder';
        case UPLOAD_ERR_CANT_WRITE:
            return 'Failed to write file to disk';
        case UPLOAD_ERR_EXTENSION:
            return 'File upload stopped by extension';
        default:
            return 'Unknown upload error';
    }
}
?>
</body>
</html>

现在我得到了错误,致命错误:在这一行调用未定义的函数 finfo_open()

$finfo = finfo_open(FILEINFO_MIME_TYPE); .

谁能帮我解决这个问题。

提前致谢。

【问题讨论】:

  • finfo_open 仅适用于 php >= 5.3.0 php.net/manual/en/function.finfo-open.php。您可能需要使用 php_info() 仔细检查您的服务器是否是最新的。此链接可能会有所帮助:stackoverflow.com/questions/21293996/…
  • @sanki:从您的链接中,我删除了分号 php.ini 文件,其中这一行“extension=php_fileinfo.dll”但仍显示该错误
  • 您使用的 PHP 版本是什么?

标签: php


【解决方案1】:

我在 IIS 上使用 PHP 时遇到了同样的问题。确保在 php.ini 中启用了 fileinfo.sophp_fileinfo.dll,这取决于您的平台和 PHP 和操作系统的版本:

应该有类似的一行

;extension=fileinfo.so;extension=php_fileinfo.dll

删除分号;(取消注释)

extension=fileinfo.soextension=php_fileinfo.dll

然后保存并重新启动 apache、nginx、IIS 或您正在使用的任何 Web 服务器。

如果这不起作用,请确保已安装 fileinfo 扩展。

【讨论】:

    猜你喜欢
    • 2016-12-01
    • 2011-10-04
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多