简体   繁体   中英

How to enable php_fileinfo extension in PHP?

My Laravel app can't validate uploaded images. It returns this error message:

Unable to guess the mime type as no guessers are available (Did you enable the php_fileinfo extension?)

Laravel 错误信息

I know enabling php_fileinfo.dll/php_fileinfo.so at php.ini fixes it. But I don't have access to my remote server's php.ini file.

So I thought is there any other way to enable it? And how? Maybe I can use PHP's ini_set() methods? I tried using it like:

ini_set('extension', 'php_fileinfo.so');

But it doesn't work.

I also read you can override php.ini settings using .htaccess files. But how?

As Laravel's default, my .htaccess file is:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

How should you put such additionals in there?

create own php.ini file in root folder of your directory.

example if you are making changes on a server then it should be inside the public.html folder.

create file name php.ini it will override the settings. just add in the file

extension=php_fileinfo.dll

If you are using WHM, go to Easy Apache, search fileinfo (In the search field), and enable it ( I found for php5.5 , php5.6 and php.7.0 .

And click on "Review" left tab.

Then click on provision, and done. It works for me ( I spend 3 hours trying install/enable fileinfo)

Create a .htaccess file where your root is and then do this

php_value extension=php_fileinfo.dll

or

php_admin_flag extension=php_fileinfo.dll

If you have cpanel just go to

Select PHP Version

and search for the extension

fileinfo

check it and you're good to go.

If you only want to upload images then it might help you.

$image_size_info = @getimagesize($filename); //surpress errors(@) if not image
if( empty($image_size_info) ) $mime_type = "";
else $mime_type = @image_type_to_mime_type( $image_size_info[2] );

//safety for all cases:
if( empty($mime_type) ) $mime_type = "";

if(  strpos($mime_type, "image/") === false  )
{
//not an Image !
} 
else 
{
  //proceed file upload
}

If above code doen't work then it might help you -->> https://github.com/thephpleague/flysystem/commit/0ec96b1104e57bfcf0e40d6169c8e203b7942b34

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

<IfModule mod_suphp.c>
suPHP_ConfigPath /home/username/public_html/subfolder
</IfModule>

</IfModule>
subfolder is the laravel project where I want to serve my application.

php.ini file in my subfolder's root folder & for enable PHPFileinfo I write those code in php.ini file

extension=fileinfo.so
extension=pdo.so
extension=pdo_mysql.so

Go to WHM and search Easy Apache install the mentioned Profile on the WHM it resolves the issue.

WHM 截图

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM