intern->u.file.context = php_stream_context_from_zval(intern->u.file.zcontext, 0);
intern->u.file.stream = php_stream_open_wrapper_ex(intern->file_name, intern->u.file.open_mode, (use_include_path ? USE_PATH : 0) | REPORT_ERRORS, NULL, intern->u.file.context);
- if (intern->u.file.stream == NULL) {
+ if (!intern->file_name_len || !intern->u.file.stream) {
if (!EG(exception)) {
- zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "Cannot open file %s", intern->file_name);
+ zend_throw_exception_ex(spl_ce_RuntimeException, 0 TSRMLS_CC, "Cannot open file '%s'", intern->file_name);
}
intern->file_name = NULL; /* until here it is not a copy */
intern->u.file.open_mode = NULL;
zend_list_addref(Z_RESVAL_P(intern->u.file.zcontext));
}
+ if (intern->file_name[intern->file_name_len-1] == '/'
+#if defined(PHP_WIN32) || defined(NETWARE)
+ ||intern->file_name[intern->file_name_len-1] == '\\'
+#endif
+ ) {
+ intern->file_name_len--;
+ }
+
intern->file_name = estrndup(intern->file_name, intern->file_name_len);
intern->u.file.open_mode = estrndup(intern->u.file.open_mode, intern->u.file.open_mode_len);
--FILE--
<?php
-function test($name)
+function test($name, $lc, $lp)
{
static $i = 0;
echo "===$i===\n";
var_dump($o === $c);
var_dump($o == $c);
var_dump($o->getPathname() == $c->getPathname());
+
+ $f = new SplFileObject($name);
+ var_dump($name);
+ var_dump($f->getPathName());
+ $l = substr($f->getPathName(), -1);
+ var_dump($l != '/' && $l != '\\' && $l == $lc);
+ var_dump($f->getFileName());
+ $l = substr($f->getFileName(), -1);
+ var_dump($l != '/' && $l != '\\' && $l == $lc);
+ var_dump($f->getPath());
+ $l = substr($f->getPath(), -1);
+ var_dump($l != '/' && $l != '\\' && $l == $lp);
}
-test(dirname(__FILE__) . '/' . 'fileobject_001a.txt');
-test(dirname(__FILE__) . '/');
+test(dirname(__FILE__) . '/' . 'fileobject_001a.txt', 't', substr(dirname(__FILE__),-1));
+test(dirname(__FILE__) . '/', substr(dirname(__FILE__),-1), 'l');
+test(dirname(__FILE__), substr(dirname(__FILE__),-1), 'l');
?>
===DONE===
bool(false)
bool(true)
bool(true)
+%s(%d) "%sfileobject_001a.txt"
+string(%d) "%sfileobject_001a.txt"
+bool(true)
+string(%d) "%sfileobject_001a.txt"
+bool(true)
+string(%d) "%stests"
+bool(true)
===1===
object(SplFileInfo)#%d (0) {
}
bool(false)
bool(true)
bool(true)
+%s(%d) "%stests/"
+string(%d) "%stests"
+bool(true)
+string(%d) "%stests"
+bool(true)
+string(%d) "%sspl"
+bool(true)
+===2===
+object(SplFileInfo)#1 (0) {
+}
+object(SplFileInfo)#2 (0) {
+}
+bool(false)
+bool(true)
+bool(true)
+%s(%d) "%stests"
+string(%d) "%stests"
+bool(true)
+string(%d) "%stests"
+bool(true)
+string(%d) "%sspl"
+bool(true)
===DONE===