參見前面的問題而被部分回答了,但出現了一個變化的腳本要求: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