См. Предыдущий вопрос, от которого частично ответили, но было изменение требований к скрипту: PHP - Exploding/Moving/Filename
Я новичок в php и застрял. У меня много файлов, которые выглядят так:
2014-04-01 NS122345 - дата, инициалы человека и код сотрудника.
Я хочу, чтобы иметь возможность перемещать файлы с NS или JB или GA в соответствующие папки/каталоги. Таким образом, для NS он войдет в папку Nathan Saunders Folder, для 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"
Любая помощь в устранении этих двух проблем будет отличной.
Благодаря,
1) Если вы хотите создать каталог в другом месте или используете относительный путь из каталога, в котором находится ваш код, или используете абсолютный путь. 2) Когда вы создаете каталог, вы используете $ foldername, но это не имя какой-либо директории. Это вместо имени файла. Кроме того, вы используете его как массив, когда он является строкой (поэтому он принимает только один символ)
Попробуй это:
$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 = substr($firstTwoLetters,0,2);
if(is_dir($dir. DS . $foldername)||mkdir($dir. DS . $foldername,0777, 1))
rename($dir.DS.$file,$dir . DS . $foldername . DS.$file);