参见前面的问题而被部分回答了,但出现了一个变化的脚本要求:PHP - Exploding/Moving/FilenamePHP - 爆炸/ SUBSTR /文件名
我是新来的PHP和我坚持。我有大量文件看起来像这样:
2014-04-01 NS122345 - 日期,人的姓名缩写以及员工代码。
我希望能够将具有NS或JB或GA的文件移动到相关文件夹/目录中。所以对于NS来说,它会进入Nathan Saunders文件夹,因为JB会进入Joe Bailey文件夹。
我的目录结构是这样的:
root/wan/upload - Where files/images/docs are stored. Inside upload folder i have:
>2014-04-08 NS6565.doc
>2012-01-03 JB8932.doc
>2013-02-01 GA5434.doc
>etc
root/wan/administrator/components/com_upload - where my code is stored
这是移动,创建并检查文件名,并把它在正确的文件夹我的PHP代码:
$dir = JPATH_BASE . DS . "upload";
$folders = array('SE528733B'=>'/var/www/vhosts/test.cariss.co.uk/httpdocs/wan/upload/528733B','SE125673B'=>'/var/www/vhosts/test.cariss.co.uk/httpdocs/wan/upload/125673B','SE3452312'=>'/var/www/vhosts/test.cariss.co.uk/httpdocs/wan/upload/3452312');
$files = scandir($dir);
foreach($files AS $file){
if(!is_file($dir.DS.$file)){ continue; }
$array = explode(' ', $file);
if(count($array)<2){ continue; }
$firstTwoLetters = substr($array[1], 0, 9);
$foldername = $firstTwoLetters;
if(is_dir($folders[$firstTwoLetters])||mkdir($foldername[$firstTwoLetters],0777, 1))
rename($dir.DS.$file,$foldername[$firstTwoLetters].DS.$file);
该代码目前读文件名,如果它已经在数组“文件夹”它移动到正确的文件夹,我最近已经改变它使文件夹自动读取上传部分中的任何文件,但问题出现在制作文件夹时,mkdir似乎使目录:
1)在错误的地方,它使代码存储在com_upload部分的位置,而不是在上传文件夹中。 2)将它命名错误,它需要第一个字母而不是后面的字母或数字。例如。 “2014-04-08 NS6565.doc”,使目录“N”
任何帮助解决这两个问题将是很大的。
感谢,
'$ firstTwoLetters = SUBSTR($阵列[1],0,9); '永远不会返回2个字符。 'substr'需要(字符串,起始点,长度)。看看[手册](http://nl1.php.net/manual/en/function.substr.php) – Michel 2014-11-05 12:01:42
嗯它会返回9这是我想要的,因为有所有的字母和空格后的数字。但它会创建文件夹,但只用一个字母命名它 – Simpson 2014-11-05 12:04:06
您不需要使用'/ var/www/vhosts .....'。您可以使用'JPATH_BASE',它将返回Joomla安装的根目录。然后你可以从那里定义其余的路径,就像你为$ dir变量所做的那样 – Lodder 2014-11-05 12:12:44