joomla — взорваться / substr / имя файла

Смотрите предыдущий Вопрос, на который был частично дан ответ, но в сценарии изменились требования: PHP — взрыв / перемещение / имя файла

я новичок в php и застрял. У меня есть множество файлов, которые выглядят так:

2014-04-01 NS122345 — дата, инициалы человека и там код сотрудника.

Я хочу иметь возможность перемещать файлы с NS, JB или GA в соответствующие папки / каталоги. Так что для NS это войдет в папку Натана Сондерса, для JB — в папку Джо Бэйли.

Моя структура каталогов выглядит так:

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»

Любая помощь в устранении этих двух проблем была бы отличной.

Спасибо,

0

Решение

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);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]