PHP - Explode / substr / Filename

0

См. Предыдущий вопрос, от которого частично ответили, но было изменение требований к скрипту: 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"

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

Благодаря,

Теги:
joomla
explode
mkdir

1 ответ

1
Лучший ответ

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);
  • 0
    Ничего себе спасибо, я отметил как принятый и поставил галочку. Спасибо
  • 0
    Быстрое редактирование, чтобы оно не перемещалось, если каталог уже существует, есть ли способ сказать, что когда он читает его, он существует и все еще перемещается в правильный каталог
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню