2014-10-24 2 views
0

Интересно, можете ли вы помочь. У меня есть нагрузок файлов, которые выглядят следующим образом:PHP - Если имя файла содержит ...... затем перейдите в каталог

2014-02-10 JB123456G

и это:

2012-02-01 NA657432B

В PHP я хочу, чтобы отфильтровать эти файлы в соответствующий каталог. Так, например, «2014-02-10 JB123456G» в папку «JB». Я думал о том, чтобы делать это как оператор If, чтобы определить, содержит ли имя файла буквы «JB», а затем переместится в каталог JB. На данный момент у меня есть:

if(JFile::exists($searchpath .DS. 'JB.png')){ 
JFile::move($searchpath .DS. 'JB.png', JPATH_BASE .DS. 'upload' .DS. 'JB' .DS. 'JB.png'); } 

Я знаю, что нужно изменить «JB.png» к чему-то, но не совсем уверен, что кто-то рекомендовал Regex сделал некоторые исследования, но не совсем уверен, как добавить, что в нем. перемещает файл JB.png в папку JB, но, очевидно, он будет перемещать только это точное имя файла и не будет перемещать имя файла: 2014-02-10 JB123456G.png.

Любая помощь приветствуется.

Благодаря

Обновление:

Вот мой полный код PHP:

<?php 
echo "Start Moving Files to Folder - Steps 1-7 <br><br>"; 
define('_JEXEC', 1); 

define('JPATH', dirname(__FILE__)); 

if (!defined('DS')){ 
    define('DS', DIRECTORY_SEPARATOR); 


$parts = explode(DS, JPATH); 
$script_root = implode(DS, $parts) ; 

// check path 
$x = array_search ('administrator', $parts ); 
if (!$x) exit; 

$path = ''; 

for ($i=0; $i < $x; $i++){ 
    $path = $path.$parts[$i].DS; 
} 
// remove last DS 
$path = substr($path, 0, -1); 

if (!defined('JPATH_BASE')){ 
    define('JPATH_BASE', $path); 
}  

if (!defined('JPATH_SITE')){ 
    define('JPATH_SITE', $path); 
}  

/* Required Files */ 
require_once (JPATH_SITE . DS . 'includes' . DS . 'defines.php'); 
require_once (JPATH_SITE . DS . 'includes' . DS . 'framework.php'); 
require_once (JPATH_SITE . DS . 'libraries' . DS . 'joomla' . DS . 'factory.php'); 
echo "Step 1 - Required Files Set<br><br>"; 

//Import filesystem libraries. 

jimport('joomla.filesystem.path'); 
jimport('joomla.filesystem.file'); 
jimport('joomla.filesystem.folder'); 
jimport('joomla.user.user'); 

echo "Step 2 - Import Filesystem libraries <br><br>"; 

//First we set up parameters 
$searchpath = JPATH_BASE . DS . "upload"; 

echo "Step 3 - Set Search Parameters to directory root/upload<br><br>"; 

//Then we create the subfolder called Images 
//if (!JFolder::create($searchpath . DS ."Images")) { 
    //Throw error message and stop script 
//} 
//echo "Step 4 - Create Subfolder if necessary <br><br>"; 

echo "Step 5 - Read all png files and place them into an array <br><br>"; 
//Now we read all png files and put them in an array. 
$png_files = JFolder::files($searchpath,'.png'); 
$doc_files = JFolder::files($searchpath,'.doc'); 


echo "Step 6 - Move all files into new folder <br><br>"; 
//Now we need some stuff from the JFile:: class to move all files into the new folder 
if(JFile::exists($searchpath .DS. 'j.png')){ 
    JFile::move($searchpath .DS. 'j.png', JPATH_BASE .DS. 'upload' .DS. 'Nathan' .DS. 'j.png'); } 



echo "Step 7 - Move the whole subdirectory to the root of the component<br><br>"; 
//Lastly, we are moving the complete subdir to the root of the component. 
if (JFolder::move($searchpath . DS. ".png",JPATH_BASE)) { 
    //Redirect with perhaps a happy message 
} else { 
    //Throw an error 


      } 
} 


?> 

ответ

0

Ну вы можете splite имя файла с пробелами, который даст вам массив два элемента 2014-02-10 и JB123456G, затем используйте подстроку, чтобы вырезать первые два элемента строки, и на основе этого вы можете перемещать файл.

+0

А как я это делаю? Я новичок в PHP. – Simpson

0

взрывается поможет вам splite вашей строки: $array = explode(' ', $filename);, то вы можете подстроки два первых элементов $array[1], который JB123456G, например, на данный момент, $firstTwoLetters = string substr ($array[1], 0, 2);

использовать PHP интерактивного руководство, это поможет вам знать все о всех функциях PHP.

http://php.net/manual/fr/function.substr.php

+0

Я получаю undefined переменную filename .... это что-то, что мне нужно импортировать вверху? – Simpson

+0

Я включил полный код выше. Я ищу, чтобы добавить то, что вы поставили выше, в этот код, но он получается пустым. У меня в основном есть папка для загрузки в корне, где установлены мои установочные файлы Joomla. У меня есть в этой папке файлы примеров, которые я поставил выше. Так что мне нужно поместить все файлы в массив, искать этот массив/имя файла для JB, а затем разделить его на части с помощью explode, чтобы получить JB123456G, а затем мне нужен способ переместить эту конкретную папку в папку JB? Я также задавался вопросом, нужно ли мне добавлять код для всех других людей, таких как NS123456, в папку NS? – Simpson

+0

Также, поскольку у меня есть множество файлов, подобных им, я должен указать каждый файл? Или я могу получить его для поиска по массиву для конкретного письма или инициалов человека – Simpson

Смежные вопросы