2016-02-12 75 views
-1
  • 我试图移动文件从JS收到到另一个文件夹Linux服务器上收到JS使用PHP
  • 用了shell_exec并打印使用POST到另一个文件夹在Linux服务器在一个文本文件中的移动指令供我参考,这样我可以验证命令正确与否

这是我的代码无法移动文件使用PHP

$command = "mv ".$file_tmp_name." ".$curr_dir."/wiresharktraces/".$file_name; 
$log_string = "command = $command \r\n";  
fwrite($file, $log_string); 
shell_exec("mv ".$file_tmp_name." ".$curr_dir."/wiresharktraces/".$file_name); 
  • 此代码在文件名较短时运行正常,但文件名较大时代码运行不正常,无法移动文件
  • command = mv/tmp/phpZRDvIp/var/www/html/web /auto/exfo/excelautomation/wiresharktraces/5.3.3.1跟踪区域服务GW更改(SGW_MME).pcap(这是我的日志文件的输出)的更新过程
  • 对于此文件,文件未在所需的文件夹中移动,但当我将文件名更改为“ab”文件被移动
  • 我也检查了几个网站的最大允许长度为mp命令,这比我的命令长度多了131072个字节,这个长度是153
  • 感谢您的帮助提前

找到理由不解决

  • 对于这种奇怪的行为的原因是“空间”和“()”或任何其他字符,除了“_”文件名,但我想解决方案,因为我不能限制用户的文件名,我想保存它相同的名称
+0

因为空格在文件名.. – dbndhjefj

+0

,但如何使用相同的代码 –

+0

正确地运行相同的文件我认为你应该使用PHP内置的'重命名'功能,不需要调用外壳。 http://php.net/manual/en/function.rename.php – dbndhjefj

回答

0

解决方案很简单替换文件中的其他字符(空格,(,[等))带下划线的名字

$file_name = preg_replace("/[^0-9,a-z,A-Z,.]/", "_", $file_name); 

这将取代除数字,字母和数字之外的所有其他字符。所以现在的Linux命令将安全执行,没有错误