致命错误:在 php 中调用未定义的函数 finfo_open()
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/26072725/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Fatal error: Call to undefined function finfo_open() in php
提问by Waqleh
I am new to php, i have created code for upload images to sql database and retrieve the image using php.
我是 php 的新手,我已经创建了用于将图像上传到 sql 数据库并使用 php 检索图像的代码。
Here is my code:
这是我的代码:
<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>
Now i got the error, Fatal error: Call to undefined function finfo_open() on this line
现在我得到了错误,致命错误:在这一行调用未定义的函数 finfo_open()
$finfo = finfo_open(FILEINFO_MIME_TYPE); .
Can somebody help me to fix this.
有人可以帮我解决这个问题。
Thanks in advance.
提前致谢。
回答by Waqleh
I had this same issue with PHP on IIS. Make sure that the fileinfo.so
or php_fileinfo.dll
is enabled in the php.ini like so, that depends on your platform and version of PHP and OS:
我在 IIS 上的 PHP 也有同样的问题。确保php.ini中的fileinfo.so
orphp_fileinfo.dll
像这样启用,这取决于您的平台和 PHP 和操作系统的版本:
There should be a line similar to
应该有一条类似于
;extension=fileinfo.so
or ;extension=php_fileinfo.dll
;extension=fileinfo.so
或者 ;extension=php_fileinfo.dll
remove the semicolon ;
(uncomment it)
删除分号;
(取消注释)
extension=fileinfo.so
or extension=php_fileinfo.dll
extension=fileinfo.so
或者 extension=php_fileinfo.dll
Then save and restart apache, nginx, IIS or whatever web server you are using.
然后保存并重新启动 apache、nginx、IIS 或您正在使用的任何 Web 服务器。
If that doesn't work, make sure that the fileinfo
extension is already installed.
如果这不起作用,请确保fileinfo
已安装扩展。