Bug #55701 [Com]: GlobIterator throws LogicException with message 'The parent constructor was not

2013-08-02 Thread rosier at interstroom dot nl
Edit report at https://bugs.php.net/bug.php?id=55701&edit=1

 ID: 55701
 Comment by: rosier at interstroom dot nl
 Reported by:b...@php.net
 Summary:GlobIterator throws LogicException with message 'The
 parent constructor was not
 Status: Assigned
 Type:   Bug
 Package:SPL related
 Operating System:   Linux, OSX
 PHP Version:5.3.8
 Assigned To:cataphract
 Block user comment: N
 Private report: N

 New Comment:

I can confirm this unexpected result also for php54 and php55

Test script:
---
getFilename() . "\n";
}

$it = new GlobIterator($path_to_files . '/*.xml');
// Expected result: count = 0
// Instead next line will crash php if no xml files are found
if ($it->count()) {
// do something...
}

?>


Previous Comments:

[2013-01-28 07:38:40] sergei dot solomonov at gmail dot com

I have same problem too.
OS: windows 7 x64, PHP 5.4.7 (built: Sep 12 2012 23:48:31).
I working with ZF2, when I trying to use phar-packed modules same error occured.
But in Ubuntu works fine.


[2012-12-21 12:18:51] ivanderberg at hostnet dot nl

I can confirm what "[2012-03-19 21:24 UTC] maciej dot sz at gmail dot com" said 
in a more simplistic way. This class fails in my current version (PHP 5.3.14 
(cli) (built: Jun 19 2012 07:35:36)) on $this->touchLockFile(...)

As I really need $file before calling the parent constructor, I have no other 
option than making it static


 */
class Lock extends \SplFileObject
{
  /**
   * @param string $file_name
   * @param string $open_mode
   * @param Filesystem $filesystem
   * @param string $lock_directory
   */
  public function __construct($file_name, $open_mode = 'r', Filesystem 
$filesystem = null, $lock_directory = '/var/lock')
  {
$filesystem = $filesystem ?: new Filesystem();
$file = $this->touchLockFile($file_name, $lock_directory, $filesystem);
parent::__construct($file, $open_mode);
  }

  /**
   * Returns true if the lock is placed, false if unable to
   *
   * @return boolean
   */
  public function lock()
  {
return $this->flock(LOCK_EX | LOCK_NB);
  }

  /**
   * Returns true if the lock is released
   *
   * @return bool
   */
  public function release()
  {
return $this->flock(LOCK_UN);
  }

  /**
   * Attempts to create a lock file for a given filename and directory
   * it will return a string if the file is touched
   *
   * @param  string $file_name
   * @param  string $lock_directory
   * @param  Filesystem $filesystem
   * @return string
   */
  private function touchLockFile($file_name, $lock_directory, Filesystem 
$filesystem)
  {
$lock_file_path = explode('/', $file_name);
$lock_file  = array_pop($path);

$path = empty($lock_file_path)
  ? "$lock_directory/$lock_file"
  :  $lock_directory . implode('/', $lock_file_path);

$lock_file = "$path/$lock_file.lock";

if(!$filesystem->exists($path) || !is_dir($path)) {
  $filesystem->mkdir($path, 0733);
}

// some modes create this file already, but we force it in
// that way the lock file always exists no matter what mode
$filesystem->touch($lock_file);
return $lock_file;
  }
}
?>


[2012-03-19 21:24:42] maciej dot sz at gmail dot com

Not sure if this is the same issue, but I've experienced something very similar 
when extending SplFileObject (see Script 1 below). This might seem to be of 
very 
little importance, as no one would ever want to extend this class in that way. 
But with the introduction of traits this became a real problem, becouse using 
trait methods that share the same name with a SplFileObject method causes to 
throw the mentioned LogicException. This happens when the method is used in 
constructor prior to calling the parent constructor even if the trait method is 
aliased (see Script 2 below).


Script 1:
--
getRealPath();

parent::__construct($fname);
}

public function getRealPath()
{
return '/tmp/foo.txt';
}
}

$f1 = new MyFileObject(__FILE__);




Script 2
--
newFileGetRealPath();

parent::__construct($new_fname);
}
}

$f1 = new MyFileObject(__FILE__);


[2011-09-15 13:42:30] b...@php.net

Description:

Basic functionality doesn't work because it seems as the GlobIterator might 
needs 
some changes to work with this commit: 
http://marc.info/?l=php-cvs&m=130188548616717

Test script:
---
next();
} while($g->valid());

Expected result:

Empty output

Actual result:
--
PHP Fatal error:  Uncaught exception 'LogicException' with message 'The parent 
constructor 
was not cal

Bug #55701 [Com]: GlobIterator throws LogicException with message 'The parent constructor was not

2013-01-27 Thread sergei dot solomonov at gmail dot com
Edit report at https://bugs.php.net/bug.php?id=55701&edit=1

 ID: 55701
 Comment by: sergei dot solomonov at gmail dot com
 Reported by:b...@php.net
 Summary:GlobIterator throws LogicException with message 'The
 parent constructor was not
 Status: Assigned
 Type:   Bug
 Package:SPL related
 Operating System:   Linux, OSX
 PHP Version:5.3.8
 Assigned To:cataphract
 Block user comment: N
 Private report: N

 New Comment:

I have same problem too.
OS: windows 7 x64, PHP 5.4.7 (built: Sep 12 2012 23:48:31).
I working with ZF2, when I trying to use phar-packed modules same error occured.
But in Ubuntu works fine.


Previous Comments:

[2012-12-21 12:18:51] ivanderberg at hostnet dot nl

I can confirm what "[2012-03-19 21:24 UTC] maciej dot sz at gmail dot com" said 
in a more simplistic way. This class fails in my current version (PHP 5.3.14 
(cli) (built: Jun 19 2012 07:35:36)) on $this->touchLockFile(...)

As I really need $file before calling the parent constructor, I have no other 
option than making it static


 */
class Lock extends \SplFileObject
{
  /**
   * @param string $file_name
   * @param string $open_mode
   * @param Filesystem $filesystem
   * @param string $lock_directory
   */
  public function __construct($file_name, $open_mode = 'r', Filesystem 
$filesystem = null, $lock_directory = '/var/lock')
  {
$filesystem = $filesystem ?: new Filesystem();
$file = $this->touchLockFile($file_name, $lock_directory, $filesystem);
parent::__construct($file, $open_mode);
  }

  /**
   * Returns true if the lock is placed, false if unable to
   *
   * @return boolean
   */
  public function lock()
  {
return $this->flock(LOCK_EX | LOCK_NB);
  }

  /**
   * Returns true if the lock is released
   *
   * @return bool
   */
  public function release()
  {
return $this->flock(LOCK_UN);
  }

  /**
   * Attempts to create a lock file for a given filename and directory
   * it will return a string if the file is touched
   *
   * @param  string $file_name
   * @param  string $lock_directory
   * @param  Filesystem $filesystem
   * @return string
   */
  private function touchLockFile($file_name, $lock_directory, Filesystem 
$filesystem)
  {
$lock_file_path = explode('/', $file_name);
$lock_file  = array_pop($path);

$path = empty($lock_file_path)
  ? "$lock_directory/$lock_file"
  :  $lock_directory . implode('/', $lock_file_path);

$lock_file = "$path/$lock_file.lock";

if(!$filesystem->exists($path) || !is_dir($path)) {
  $filesystem->mkdir($path, 0733);
}

// some modes create this file already, but we force it in
// that way the lock file always exists no matter what mode
$filesystem->touch($lock_file);
return $lock_file;
  }
}
?>


[2012-03-19 21:24:42] maciej dot sz at gmail dot com

Not sure if this is the same issue, but I've experienced something very similar 
when extending SplFileObject (see Script 1 below). This might seem to be of 
very 
little importance, as no one would ever want to extend this class in that way. 
But with the introduction of traits this became a real problem, becouse using 
trait methods that share the same name with a SplFileObject method causes to 
throw the mentioned LogicException. This happens when the method is used in 
constructor prior to calling the parent constructor even if the trait method is 
aliased (see Script 2 below).


Script 1:
--
getRealPath();

parent::__construct($fname);
}

public function getRealPath()
{
return '/tmp/foo.txt';
}
}

$f1 = new MyFileObject(__FILE__);




Script 2
--
newFileGetRealPath();

parent::__construct($new_fname);
}
}

$f1 = new MyFileObject(__FILE__);


[2011-09-15 13:42:30] b...@php.net

Description:

Basic functionality doesn't work because it seems as the GlobIterator might 
needs 
some changes to work with this commit: 
http://marc.info/?l=php-cvs&m=130188548616717

Test script:
---
next();
} while($g->valid());

Expected result:

Empty output

Actual result:
--
PHP Fatal error:  Uncaught exception 'LogicException' with message 'The parent 
constructor 
was not called: the object is in an invalid state ' in /private/tmp/x.php:6
Stack trace:
#0 /private/tmp/x.php(6): SplFileInfo->_bad_state_ex()
#1 {main}
  thrown in /private/tmp/x.php on line 6

Fatal error: Uncaught exception 'LogicException' with message 'The parent 
constructor was not 
called: the object is in an invalid state ' in /private/tmp/x.php:6
Stack trace:
#0 /private/tmp/x.php(6): SplFileInfo->_bad_state_ex()
#1 {main}
  thrown

Bug #55701 [Com]: GlobIterator throws LogicException with message 'The parent constructor was not

2012-12-21 Thread ivanderberg at hostnet dot nl
Edit report at https://bugs.php.net/bug.php?id=55701&edit=1

 ID: 55701
 Comment by: ivanderberg at hostnet dot nl
 Reported by:b...@php.net
 Summary:GlobIterator throws LogicException with message 'The
 parent constructor was not
 Status: Assigned
 Type:   Bug
 Package:SPL related
 Operating System:   Linux, OSX
 PHP Version:5.3.8
 Assigned To:cataphract
 Block user comment: N
 Private report: N

 New Comment:

I can confirm what "[2012-03-19 21:24 UTC] maciej dot sz at gmail dot com" said 
in a more simplistic way. This class fails in my current version (PHP 5.3.14 
(cli) (built: Jun 19 2012 07:35:36)) on $this->touchLockFile(...)

As I really need $file before calling the parent constructor, I have no other 
option than making it static


 */
class Lock extends \SplFileObject
{
  /**
   * @param string $file_name
   * @param string $open_mode
   * @param Filesystem $filesystem
   * @param string $lock_directory
   */
  public function __construct($file_name, $open_mode = 'r', Filesystem 
$filesystem = null, $lock_directory = '/var/lock')
  {
$filesystem = $filesystem ?: new Filesystem();
$file = $this->touchLockFile($file_name, $lock_directory, $filesystem);
parent::__construct($file, $open_mode);
  }

  /**
   * Returns true if the lock is placed, false if unable to
   *
   * @return boolean
   */
  public function lock()
  {
return $this->flock(LOCK_EX | LOCK_NB);
  }

  /**
   * Returns true if the lock is released
   *
   * @return bool
   */
  public function release()
  {
return $this->flock(LOCK_UN);
  }

  /**
   * Attempts to create a lock file for a given filename and directory
   * it will return a string if the file is touched
   *
   * @param  string $file_name
   * @param  string $lock_directory
   * @param  Filesystem $filesystem
   * @return string
   */
  private function touchLockFile($file_name, $lock_directory, Filesystem 
$filesystem)
  {
$lock_file_path = explode('/', $file_name);
$lock_file  = array_pop($path);

$path = empty($lock_file_path)
  ? "$lock_directory/$lock_file"
  :  $lock_directory . implode('/', $lock_file_path);

$lock_file = "$path/$lock_file.lock";

if(!$filesystem->exists($path) || !is_dir($path)) {
  $filesystem->mkdir($path, 0733);
}

// some modes create this file already, but we force it in
// that way the lock file always exists no matter what mode
$filesystem->touch($lock_file);
return $lock_file;
  }
}
?>


Previous Comments:

[2012-03-19 21:24:42] maciej dot sz at gmail dot com

Not sure if this is the same issue, but I've experienced something very similar 
when extending SplFileObject (see Script 1 below). This might seem to be of 
very 
little importance, as no one would ever want to extend this class in that way. 
But with the introduction of traits this became a real problem, becouse using 
trait methods that share the same name with a SplFileObject method causes to 
throw the mentioned LogicException. This happens when the method is used in 
constructor prior to calling the parent constructor even if the trait method is 
aliased (see Script 2 below).


Script 1:
--
getRealPath();

parent::__construct($fname);
}

public function getRealPath()
{
return '/tmp/foo.txt';
}
}

$f1 = new MyFileObject(__FILE__);




Script 2
--
newFileGetRealPath();

parent::__construct($new_fname);
}
}

$f1 = new MyFileObject(__FILE__);


[2011-09-15 13:42:30] b...@php.net

Description:

Basic functionality doesn't work because it seems as the GlobIterator might 
needs 
some changes to work with this commit: 
http://marc.info/?l=php-cvs&m=130188548616717

Test script:
---
next();
} while($g->valid());

Expected result:

Empty output

Actual result:
--
PHP Fatal error:  Uncaught exception 'LogicException' with message 'The parent 
constructor 
was not called: the object is in an invalid state ' in /private/tmp/x.php:6
Stack trace:
#0 /private/tmp/x.php(6): SplFileInfo->_bad_state_ex()
#1 {main}
  thrown in /private/tmp/x.php on line 6

Fatal error: Uncaught exception 'LogicException' with message 'The parent 
constructor was not 
called: the object is in an invalid state ' in /private/tmp/x.php:6
Stack trace:
#0 /private/tmp/x.php(6): SplFileInfo->_bad_state_ex()
#1 {main}
  thrown in /private/tmp/x.php on line 6






-- 
Edit this bug report at https://bugs.php.net/bug.php?id=55701&edit=1


Bug #55701 [Com]: GlobIterator throws LogicException with message 'The parent constructor was not

2012-03-19 Thread maciej dot sz at gmail dot com
Edit report at https://bugs.php.net/bug.php?id=55701&edit=1

 ID: 55701
 Comment by: maciej dot sz at gmail dot com
 Reported by:b...@php.net
 Summary:GlobIterator throws LogicException with message 'The
 parent constructor was not
 Status: Assigned
 Type:   Bug
 Package:SPL related
 Operating System:   Linux, OSX
 PHP Version:5.3.8
 Assigned To:cataphract
 Block user comment: N
 Private report: N

 New Comment:

Not sure if this is the same issue, but I've experienced something very similar 
when extending SplFileObject (see Script 1 below). This might seem to be of 
very 
little importance, as no one would ever want to extend this class in that way. 
But with the introduction of traits this became a real problem, becouse using 
trait methods that share the same name with a SplFileObject method causes to 
throw the mentioned LogicException. This happens when the method is used in 
constructor prior to calling the parent constructor even if the trait method is 
aliased (see Script 2 below).


Script 1:
--
getRealPath();

parent::__construct($fname);
}

public function getRealPath()
{
return '/tmp/foo.txt';
}
}

$f1 = new MyFileObject(__FILE__);




Script 2
--
newFileGetRealPath();

parent::__construct($new_fname);
}
}

$f1 = new MyFileObject(__FILE__);


Previous Comments:

[2011-09-15 13:42:30] b...@php.net

Description:

Basic functionality doesn't work because it seems as the GlobIterator might 
needs 
some changes to work with this commit: 
http://marc.info/?l=php-cvs&m=130188548616717

Test script:
---
next();
} while($g->valid());

Expected result:

Empty output

Actual result:
--
PHP Fatal error:  Uncaught exception 'LogicException' with message 'The parent 
constructor 
was not called: the object is in an invalid state ' in /private/tmp/x.php:6
Stack trace:
#0 /private/tmp/x.php(6): SplFileInfo->_bad_state_ex()
#1 {main}
  thrown in /private/tmp/x.php on line 6

Fatal error: Uncaught exception 'LogicException' with message 'The parent 
constructor was not 
called: the object is in an invalid state ' in /private/tmp/x.php:6
Stack trace:
#0 /private/tmp/x.php(6): SplFileInfo->_bad_state_ex()
#1 {main}
  thrown in /private/tmp/x.php on line 6






-- 
Edit this bug report at https://bugs.php.net/bug.php?id=55701&edit=1