Bug #67361 [Com]: copy() fails on filename with newline
Edit report at https://bugs.php.net/bug.php?id=67361&edit=1
ID: 67361
Comment by: Husman85 at gmail dot com
Reported by: tux at krageroby dot no
Summary: copy() fails on filename with newline
Status: Open
Type: Bug
Package: Filesystem function related
Operating System: xUbuntu
PHP Version: 5.5.13
Block user comment: N
Private report: N
New Comment:
This is not a bug. See below:
Test script:
--------------
<?php
// Create a directory to work with
mkdir("testdir", 0777);
// Create a file with Windows-style newline in the file name.
file_put_contents("testdir/filename_with\r\nNewline_character", "test 321");
// Read active directory
$files = scandir('testdir');
// print the directories/files
print_r($files);
// Store the file name of the created file
$created_file = $files[2];
// Attempt to copy file:
echo "\n";
copy("testdir/filename_with\r\nNewline_character", "testdir/copytest");
echo "\n";
// Output files in testdir
$files = scandir('testdir');
print_r($files);
// Can we find "\r\n" in the file name?
echo "\n";
$escaped_name = str_replace(array("\r\n"), '\r\n', $created_file);
echo "created/copied filename: ". $escaped_name;
echo "\n";
?>
Expected result (if bug):
-------------------------
Array
(
[0] => .
[1] => ..
[2] => filename_with
Newline_character
)
Warning: copy(testdir/filename_with
Newline_character): failed to open stream: No such file or directory in
/home/husman/Desktop/test/php/bug_67361.php on line 20
Array
(
[0] => .
[1] => ..
[2] => copytest
[3] => filename_with
Newline_character
)
created/copied filename: filename_with\r\nNewline_character
Actual result:
-------------------------
Array
(
[0] => .
[1] => ..
[2] => filename_with
Newline_character
)
Array
(
[0] => .
[1] => ..
[2] => copytest
[3] => filename_with
Newline_character
)
created/copied filename: filename_with\r\nNewline_character
Further Comments:
-----------------
Maybe the file name is not being properly encoded when unpacked from the zip file?
Previous Comments:
------------------------------------------------------------------------
[2014-06-18 08:23:54] tux at krageroby dot no
Yes, this bug occurs when the filename contains a real windows newline in the filename. so, if using
single quotes, the result is file not found. The bug in my case occurs when unpacking files from a
.zip file that has a windows newline in the filename.
------------------------------------------------------------------------
[2014-06-18 01:21:09] husman85 at gmail dot com
The reason why this fails is because you have escape sequences wrapped in double quotes. If you try
the same thing with single quotes, then you will notice this function is working properly. Escape
sequences are parsed in the context of double quotes.
------------------------------------------------------------------------
[2014-05-30 06:46:49] tux at krageroby dot no
Description:
------------
When trying to use php copy() function on a file with a newline character in the filename, it fails
to open stream.
Test script:
---------------
php -r 'copy("filename_with\r\nNewline_character", "/tmp/copytest");'
Actual result:
--------------
php -r 'copy("filename_with\r\nNewline_character", "/tmp/copytest");'
PHP Warning: copy(filename_with
Newline_character): failed to open stream: No such file or directory in Command line code on line 1
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=67361&edit=1
Thread (7 messages)