2011-03-24 11 views
1

これは難しい問題です。どこから始めるべきかわからないので、どんな助力にも感謝します。PHPは選択したファイルをAフォルダからBフォルダに移動します

私はいくつかの子フォルダを含む 'source'(c:/ dev/source)という親フォルダを持っています。

子フォルダの隣にチェックボックスを入れ、新しいフォルダ名を入力するためのテキストフィールドが表示され、コピー先のチェックボックスにチェックを入れる必要がありますCには/ dev /ソース:は/ dev /宛先/

the_folder_name_they_typed_inこれは、すべてのローカルで実行されている:彼らは提出]をクリックすると、選択した子フォルダがCからコピーされます

the_folder_name_they_typed_inは/ dev /宛先/内部開発サーバー。子フォルダは常にc:/ dev/source/

+0

[php 'rename()'](http://php.net/manual/en/function.rename.php)機能から始めてください。 – sarnold

答えて

1

ここにはあまり知られていないDirectoryIteratorというコードがあります。

ファイルとフォルダの横にチェックボックスを付けてリストを作成し、それらをすべて配列に入れてください。これはPHPサイトでは完全に文書化されていません。

$Directory = new RecursiveDirectoryIterator('c:/dev/source'); 
$Iterator = new RecursiveIteratorIterator($Directory);  

?><form method="post"><? 
foreach($Iterator as $r){ 

     if($r->isDot()) continue; 

     echo "<input type=\"checkbox\" name=\"copy[]\" value=\"".($r->getSubPathName())."\"> ".$r->getSubPathName() . " <br>"; 

} 
?></form><? 

は今、私はあなたはそれが配列を出力した場合、私に知らせてでき$r->getSubPathName()から何を得る結果、完全にはよく分からないファイル

<?php 
if($_POST){ 
if(is_array($_POST['copy'])) foreach($_POST['copy'] as $c){ 
@copy($c, str_replace('c:/dev/source','c:/dev/dest', $c)); 
    echo "copied: $c to ". str_replace('c:/dev/source','c:/dev/dest', $c) . "<br>"; 

} 
} 

の先頭にこの部分を追加しますか?そうであれば、$ r-> getSubPath()に置き換えてから、コピーするときに変数 "$ c"に "c:/ dev/source"を追加することができますか?

参考資料:

here

+0

Jasonに感謝します。しかし、それはエラーを投げた: 致命的なエラー:定義されていないメソッドへの呼び出しSplFileInfo :: isDot() – PHPnoob

+0

@PHPnoobを実行しているPHPのバージョンは? – Jason

1

ソンムアドバイス:

先フォルダで使用可能な文字のためのホワイトリストを使用してください。動作のみをコミットそれが一致した場合:

^[a-z0-9_-]+$ 

をあなたは、ディレクトリ名に配列のインデックスを使用することができます。この方法は、あなたは、上記のようなホワイトリストに対するforeach ($_POST["dirs"]) { ... }

<input type="checkbox" name="dirs[directory_name]"/> 
<input type="checkbox" name="dirs[other_dir_name]"/> 
<input type="checkbox" name="dirs[third_directory_name]"/> 

必ずchecktheのディレクトリ名でckeckboxesスルー繰り返すことができます。 (./などの文字を許可する場合は、セキュリティリスクの可能性があります)。