如何在PHP中启用php_fileinfo扩展?

9
我的Laravel应用无法验证上传的图片。它返回以下错误信息:
无法猜测MIME类型,因为没有可用的猜测器(您是否启用了php_fileinfo扩展名?)
我知道在php.ini中启用php_fileinfo.dll/php_fileinfo.so可以解决此问题。但我无法访问我的远程服务器的php.ini文件。
那么,我想是否有其他方法可以启用它?如何启用?也许我可以使用PHP的ini_set()方法?我尝试像这样使用它:
ini_set('extension', 'php_fileinfo.so');

但是它不起作用。

我也看到过可以使用 .htaccess 文件覆盖 php.ini 设置。但是怎么做呢?

像 Laravel 默认的一样,我的 .htaccess 文件是:

<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>

你应该如何将这些附加内容放在那里?

一些共享主机仍然允许使用私有的php.ini文件来进行此类操作。然而,大多数不允许,如果您的情况适用于此,则需要联系支持团队以查看他们是否会启用它。在大多数情况下,他们不会这样做,因为更改将影响所有用户,并且可能会影响其他人的应用程序。 - halfer
7个回答

9
在您的目录根文件夹中创建自己的php.ini文件。 例如,如果您正在对服务器进行更改,则应将其放置在public.html文件夹中。 创建文件名为php.ini,它将覆盖设置。 只需在文件中添加即可。
extension=php_fileinfo.dll

5
如果您使用的是WHM,请前往Easy Apache,搜索fileinfo(在搜索字段中),并启用它(我发现对于php5.5php5.6php.7.0都适用)。
然后点击左边的"Review"选项卡。
然后点击provision,完成。这对我有用(我花了3个小时尝试安装/启用fileinfo)。

3

进入WHM,搜索Easy Apache并在WHM上安装提到的配置文件即可解决问题。

WHM屏幕截图


1
如果您有cpanel,只需前往“选择PHP版本”,然后搜索扩展名“fileinfo”,勾选它即可。

0
如果你只想上传图片,那么这可能会对你有所帮助。
$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
}

如果上述代码无法正常工作,则以下链接可能会对你有所帮助 -->> https://github.com/thephpleague/flysystem/commit/0ec96b1104e57bfcf0e40d6169c8e203b7942b34


0
创建一个 .htaccess 文件在你的根目录下,然后执行以下操作。
php_value extension=php_fileinfo.dll

或者

php_admin_flag extension=php_fileinfo.dll

5
我尝试了这个方法,并将其放在Laravel的“public”目录下的.htaccess文件中。但是它并没有起作用:服务器返回“500内部服务器错误”。你的情况下是否有效?你能详细说明一下.htaccess文件吗? - doncadavona

-1
<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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接