【问题标题】:How to enable php_fileinfo extension in PHP?如何在 PHP 中启用 php_fileinfo 扩展?
【发布时间】:2015-05-12 22:40:45
【问题描述】:

我的 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 文件来处理这类事情。但是,大多数人不这样做,如果这适用于您的情况,您将需要联系您的支持团队以查看他们是否会启用它。在大多数情况下他们不会,因为更改会影响所有用户,并且可以想象它可能会扰乱其他人的应用程序。

标签: php image .htaccess validation laravel


【解决方案1】:

如果您只想上传图片,那么它可能会对您有所帮助。

$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

【讨论】:

    【解决方案2】:

    在您的根目录处创建一个.htaccess 文件,然后执行此操作

    php_value extension=php_fileinfo.dll
    

    php_admin_flag extension=php_fileinfo.dll
    

    【讨论】:

    • 我试过这个并将它放在我的 .htcaccess uder Laravel 的“公共”目录中。它不起作用:服务器返回“500 Internal Server Error”。这对你有用吗?您能详细说明 .htaccess 文件吗?
    【解决方案3】:

    如果你有 cpanel 就去

    选择 PHP 版本

    然后搜索扩展名

    文件信息

    检查一下就可以了。

    【讨论】:

      【解决方案4】:

      在您的目录的根文件夹中创建自己的php.ini 文件。

      例如,如果您在服务器上进行更改,那么它应该位于 public.html 文件夹中。

      创建文件名 php.ini 它将覆盖设置。 只需添加文件

      extension=php_fileinfo.dll
      

      【讨论】:

        【解决方案5】:
        <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
        

        【讨论】:

          【解决方案6】:

          如果您使用 WHM,请转到 Easy Apache,搜索 fileinfo(在搜索字段中)并启用它(我找到了 php5.5php5.6php.7.0

          然后点击左侧的“Review”标签。

          然后点击设置,完成。它对我有用(我花了 3 个小时尝试安装/启用文件信息)

          【讨论】:

            【解决方案7】:

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

            【讨论】:

            • 感谢编辑
            猜你喜欢
            • 2020-06-16
            • 2021-12-22
            • 2014-10-13
            • 1970-01-01
            • 2016-05-27
            • 2019-11-27
            相关资源
            最近更新 更多