Интересно, если вы можете помочь, я новичок в php и застрял. У меня есть множество файлов, которые выглядят так:
2014-04-01 NS122345 — дата, инициалы человека и там код сотрудника.
Я хочу иметь возможность перемещать файлы с NS, JB или GA в соответствующие папки / каталоги. Так что для NS это войдет в папку Натана Сондерса, для JB — в папку Джо Бэйли.
Несколько человек сказали мне использовать разнесение и подстроку, чтобы разделить имя файла, а затем я предполагаю поиск по массиву. Кто-то сказал, чтобы использовать это:
$array = explode(' ', $filename);
$firstTwoLetters = string substr ($array[1], 0, 2);
Но я получаю ошибку переменной имя файла не определено.
К сожалению, я понятия не имею. У меня есть поиск по форумам после форумов и сообщений после сообщений, я до сих пор придумал это:
if(JFile::exists($searchpath .DS. '.doc')){
JFile::move($searchpath .DS. '.doc', JPATH_BASE .DS. 'upload' .DS. 'Nathan' .DS. '.doc'); }
Моя структура каталогов выглядит так:
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
Проблема в том, что у меня есть миллионы этих файлов, и дата в начале примера, который я привел выше, будет меняться для каждого.
Я попытался поместить их в массив, но не уверен, как потом разделить / вызвать правильный, чтобы поместить в нужную папку:
Попытка — массив
$dir = JPATH_BASE . DS . "upload";
$basename = basename($dir);
$array = scandir($dir);
$filename = basename($dir[0]);
print_r($array);
print_r($basename);
Буду признателен за любую оказанную помощь. Или, если вы можете указать мне примеры / документацию, это будет здорово.
Спасибо
Предполагая, что DS равен DIRECTORY_SEPARATOR
$dir = JPATH_BASE . DS . "upload";
$folders = array('NS'=>'/path/to/Nathan/Saunders/Folder','JB'=>'/path/to/Joe/Bailey/folder');
$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, 2);
if(!empty($folders[$firstTwoLetters])){
rename($dir.DS.$file,$folders[$firstTwoLetters].DS.$file);
}
}
Других решений пока нет …