-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Minor - P4
-
Affects Version/s: 1.1.0
-
Component/s: None
-
None
-
None
-
None
-
None
-
None
-
None
-
None
-
None
This came up during a code review for PHPLIB-233:
<?php require 'vendor/autoload.php'; $bucket = (new MongoDB\Client)->test->selectGridFSBucket(); $stream = $bucket->openUploadStream('filename');
The following produces the following error when run as a CLI script:
Warning: hash_final(): supplied resource is not a valid Hash Context resource in /home/jmikola/workspace/mongodb/phplib/src/GridFS/WritableStream.php on line 222
Fatal error: Uncaught Error: Class 'MongoDB\Operation\FindOne' not found in /home/jmikola/workspace/mongodb/phplib/src/Collection.php:594
Stack trace:
#0 /home/jmikola/workspace/mongodb/phplib/src/GridFS/CollectionWrapper.php(333): MongoDB\Collection->findOne(Array, Array)
#1 /home/jmikola/workspace/mongodb/phplib/src/GridFS/CollectionWrapper.php(317): MongoDB\GridFS\CollectionWrapper->isFilesCollectionEmpty()
#2 /home/jmikola/workspace/mongodb/phplib/src/GridFS/CollectionWrapper.php(254): MongoDB\GridFS\CollectionWrapper->ensureIndexes()
#3 /home/jmikola/workspace/mongodb/phplib/src/GridFS/WritableStream.php(229): MongoDB\GridFS\CollectionWrapper->insertFile(Array)
#4 /home/jmikola/workspace/mongodb/phplib/src/GridFS/WritableStream.php(137): MongoDB\GridFS\WritableStream->fileCollectionInsert()
#5 /home/jmikola/workspace/mongodb/phplib/src/GridFS/StreamWrapper.php(73): MongoDB\GridFS\WritableStream->close()
#6 [internal function]: MongoDB\GridFS\StreamWrapper->stream_close()
#7 {main}
thrown in /home/jmikola/workspace/mongodb/phplib/src/Collection.php on line 594
Running this script through PHP 7.2 produces the following errors:
- The MD5 hash context has already been freed before we finalize it
- The MongoDB\Operation\FindOne class cannot be autoloaded at this point
On PHP 5.6, only the autoloading error appears (with a reference to spl_autoload() being unable to load the class).
I believe the commonality in both of these errors is that we're running logic after the request has ended. As the last reference to the $stream is removed, its close handler is invoked. We should investigate whether there is a workaround for this short of advising users to manually close any streams defined in a global context.
- related to
-
PHPLIB-1313 GridFS close writable stream when the process ends to ensure the file is sent
-
- Closed
-