php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #59516 Call to undefined method finfo::__destruct
Submitted: 2010-11-18 13:16 UTC Modified: 2012-02-25 00:44 UTC
From: arimbourg at ariworld dot eu Assigned:
Status: Not a bug Package: *General Issues
PHP Version: 5.3.3.04 OS: Mandriva 2010 linux free
Private report: No CVE-ID: None
 [2010-11-18 13:16 UTC] arimbourg at ariworld dot eu
Description:
------------
PHP 5.3.3 with Suhosin-Patch (cli) (built: Nov  9 2010 14:49:46) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH

Apache mpm prefork
Loaded modules :
  core
  prefork
  http_core
  mod_so mod_authn_file
  mod_authn_anon
  mod_authn_default
  mod_authn_alias
  mod_authz_host
  mod_authz_groupfile
  mod_authz_user
  mod_authz_dbm
  mod_authz_owner
  mod_authz_default
  mod_auth_basic
  mod_auth_digest
  mod_include
  mod_filter
  mod_substitute
  mod_log_config
  mod_env
  mod_mime_magic
  mod_expires
  mod_headers
  mod_usertrack
  mod_unique_id
  mod_setenvif
  mod_version
  mod_mime
  mod_status
  mod_autoindex
  mod_info
  mod_cgi
  mod_vhost_alias
  mod_negotiation
  mod_dir
  mod_imagemap
  mod_actions
  mod_alias
  mod_rewrite
  mod_ssl
  mod_userdir
  mod_php5

Is it really a destructor for PECL Object Oriented usage?
Currently, I can only unset the variable that contain the resource.
Calling __destruct method give a fatal error.


Reproduce code:
---------------
<?php

putenv ('MAGIC=/usr/share/misc/magic.mgc'); //Magic didn't work... other bug...
ini_set ('display_errors', 1);

$finfo = new finfo ();

echo ($finfo->file ('index.php', FILEINFO_MIME) . "\n");

print_r (get_class_methods ('finfo')); // no __destruct method

$finfo->__destruct (); // Error !!
// finfo::__destruct () : Error too... as expected

?>

Expected result:
----------------
text/x-php; charset=utf-8
Array (
    [0] => finfo
    [1] => set_flags
    [2] => file
    [3] => buffer
    [4] => __destruct
)


Actual result:
--------------
text/x-php; charset=utf-8
Array (
    [0] => finfo
    [1] => set_flags
    [2] => file
    [3] => buffer
)
Fatal error: Call to undefined method finfo::__destruct() in /path/to/file.php on line 12

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-11-19 14:29 UTC] arimbourg at ariworld dot eu
Yesterday (18 nov) it was the destruct method that didn't exist. Today, PHP was updated to version 5.3.3.04 and it's the whole finfo class that have disappeared.
I wanted to check if the previous bug was fixed and then I noticed a new error : PHP Fatal error: Class 'finfo' not found in /path/to/file.php on line #, referer: http://referer/url
 [2010-11-19 14:38 UTC] arimbourg at ariworld dot eu
I tried using the function finfo_open too... PHP Fatal error: Call to undefined function finfo_open() in /path/to/file.php on line #, referer: http://referer/url
 [2010-11-19 15:01 UTC] arimbourg at ariworld dot eu
if this can help...
the output for 'pecl version' and 'pear version' commands:

$ pecl version
Warning: Invalid argument supplied for foreach() in Command.php on line 259
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259
(repeated 11)

Notice: Undefined index: honorsbaseinstall in Role.php on line 180
(repeated 9)

Notice: Undefined index: installable in Role.php on line 145
(repeated 9)

Notice: Undefined index: phpfile in Role.php on line 212
(repeated 9)

Notice: Undefined index: config_vars in Role.php on line 49
(repeated 9)

Warning: Invalid argument supplied for foreach() in PEAR/Command.php on line 259
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 259
(repeated 11)
PEAR Version: 1.9.1
PHP Version: 5.3.3
Zend Engine Version: 2.3.0
Running on: Linux HOST 2.6.33.7-desktop586-2mnb #1 SMP Mon Sep 20 18:19:58 UTC 2010 i686


$ pear version
PEAR Version: 1.9.1
PHP Version: 5.3.3
Zend Engine Version: 2.3.0
Running on: Linux HOST 2.6.33.7-desktop586-2mnb #1 SMP Mon Sep 20 18:19:58 UTC 2010 i686


Each command I try with PECL give me almost the same output...
 [2010-11-22 17:28 UTC] arimbourg at ariworld dot eu
fileinfo functions are back.
Mandriva stores now that extension in a separate package (php-fileinfo-5.3.3-0.4mdv2010.1)... I didn't noticed it... sorry.
Now the package is installed and all is well again.
One problem is remaining : no finfo::__destruct method. We can't free the resource when using object style fileinfo.
I implemented a class acting like finfo (should).
It's storing the resource and flags in private static variables and using the finfo function in the methods :
    __CLASS__::__construct => finfo_open
    __CLASS__::buffer => finfo_buffer
    __CLASS__::file => finfo_file
    __CLASS__::set_flags => finfo_set_flags
    __CLASS__::__destruct => finfo_close

It's working well but I hope I'll be able to use the "native" finfo Class in the future...

I notice one more problem : all the FILEINFO constants aren't defined :
PHP Notice:  Use of undefined constant FILEINFO_COMPRESS - assumed 'FILEINFO_COMPRESS' in /path/to/file.php on line 57
 [2012-02-25 00:44 UTC] stas@php.net
Sorry, but your problem does not imply a bug in PHP itself.  For a
list of more appropriate places to ask for help using PHP, please
visit http://www.php.net/support.php as this bug system is not the
appropriate forum for asking support questions.  Due to the volume
of reports we can not explain in detail here why your report is not
a bug.  The support channels will be able to provide an explanation
for you.

Thank you for your interest in PHP.

You do not call __destruct directly. Just unset the variable or assign null to 
it.
 [2012-02-25 00:44 UTC] stas@php.net
-Status: Open +Status: Not a bug -Package: Fileinfo +Package: *General Issues
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Wed Jun 19 19:01:32 2024 UTC