我意识到其他一些事情需要在这里重新考虑,但是现在只是试着提示工作。
我想重命名一个文件夹。这在使用argv时有效,但在提示输入新名称时则无效。
用php调用rename.php foo工作
rename.php
$baseDir = __DIR__.'\\app\\';
$name = $argv[1];
if(is_dir($baseDir.'src')) {
rename($baseDir.'src', $baseDir.$name);
}
提示输入新名称错误
PHP Warning: rename(C:\Users\lotus\projects\apisUWontHate\app\src,C:\Users\lotus\projects\apisUWontHate\app\foo
): The filename, directory name, or volume label syntax is incorrect. (code: 123)
rename.php
$baseDir = __DIR__.'\\app\\';
echo 'Enter the name for your app. This will be the root namespace.';
$handle = fopen('php://stdin', 'r');
$name = fgets($handle);
fclose($handle);
if(is_dir($baseDir.'src')) {
rename($baseDir.'src', $baseDir.$name);
}
我尝试检查类型并回显结果,但两者完全相同
echo gettype($name);// string
echo $baseDir.$name;// C:\Users\lotus\projects\apisUWontHate\app\foo
我在这里没有正确使用stdin,还是有其他可能导致错误消息的内容?
答案 0 :(得分:1)
除非您的文件名以换行符结尾,否则您需要修剪fgets()的输入,因为它包含新行
的php.net文档页面引用读取长度 - 读取1个字节或换行时结束 (包含在返回值中)或EOF(以较大者为准) 首先来了。)
(我的重点)