diff options
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/standard/file.c | 2 | ||||
| -rw-r--r-- | ext/standard/tests/file/bug65701.phpt | 30 |
2 files changed, 31 insertions, 1 deletions
diff --git a/ext/standard/file.c b/ext/standard/file.c index 74df6dc759..e1f24abf64 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -1668,7 +1668,7 @@ PHPAPI int php_copy_file_ctx(const char *src, const char *dest, int src_flg, php return FAILURE; } - switch (php_stream_stat_path_ex(dest, PHP_STREAM_URL_STAT_QUIET, &dest_s, ctx)) { + switch (php_stream_stat_path_ex(dest, PHP_STREAM_URL_STAT_QUIET | PHP_STREAM_URL_STAT_NOCACHE, &dest_s, ctx)) { case -1: /* non-statable stream */ goto safe_to_copy; diff --git a/ext/standard/tests/file/bug65701.phpt b/ext/standard/tests/file/bug65701.phpt new file mode 100644 index 0000000000..2b1b5d491d --- /dev/null +++ b/ext/standard/tests/file/bug65701.phpt @@ -0,0 +1,30 @@ +--TEST-- +Test for bug #65701: copy() doesn't work when destination filename is created by tempnam() +--CREDITS-- +Boro Sitnikovski <buritomath@yahoo.com> +--FILE-- +<?php +$file_path = dirname(__FILE__) . "/bug65701/"; + +mkdir($file_path); + +$src = $file_path . '/srcbug65701_file.txt'; +$dst = tempnam($file_path, 'dstbug65701_file.txt'); + +file_put_contents($src, "Hello World"); + +copy($src, $dst); +var_dump(filesize($dst)); +?> +--CLEAN-- +<?php +$file_path = dirname(__FILE__) . "/bug65701/"; +foreach (scandir($file_path) as $file) { + if (strpos($file, "bug65701") !== false) { + unlink($file_path . $file); + } +} +rmdir($file_path); +?> +--EXPECT-- +int(11) |
