2012-07-03 8 views
6

第一に私はあなたの質問を他のスタックサイト用であれば、この質問を投稿する正しいstackExchangeサイトではありません。私の質問を削除してください。フルパスのないフォルダをzipにする方法

さて、質問についての話を聞かせて:/home/user/public_html/folder-one/folder-two/folder-three/file.phpと、ファイルはすべてのファイルと/folder-oneのサブフォルダのフォルダ/folder-oneのアーカイブを作成する必要があります。この状況は私がにあるファイルを持っています。私はシステム関数(exec()、shell_exec()、system())を使ってアーカイブを作成します。私のコードは次のとおりです。

<?php 
$output = 'zip -rq my-zip.zip /home/user/public_html/folder-one -x missthis/\*'; 
shell_exec($output); 
?> 

しかし、私はアーカイブをダウンロードし、アーカイブを開く/homeとしてサブフォルダを含めます。 /user; /public_htmlしかし、このフォルダは完全に不要で、私はそれらなしでzipを作成する方法を知りたいです。

私はこのような何かをしようと$output = 'zip -rq my-zip.zip ../../../folder-one -x missthis/\*';が、私は(Windows 7のベースのOS上で)アーカイブを開くと、フォルダ-1の名前は../folder-one

ポストスクリプトです:誰かが私が正しい与えればそれは良くなります$outputWindows上のmake zipsは、ホスティングプランに基づいています。

よろしくお願いします。 ジョージ!

答えて

10

デフォルトでは、zipは現在のディレクトリを基準にした絶対パスを保存します。だから、zipを実行する前に、public_htmlcdにあります

$output = 'cd /home/user/public_html; zip -rq my-zip.zip folder-one -x missthis/\*'; 
shell_exec($output); 
+0

その仕事は完璧です、ありがとう! –

2

cdを行わず、より良い方法があります。 hereのように、完全なパスを無視するオプションがあります。これは-jまたは--junk-pathsです。だからあなたはできます:

<?php 
$output = 'zip -jrq my-zip.zip /home/user/public_html/folder-one -x missthis/\*'; 
shell_exec($output); 
?> 
+0

-jは '/ folder_one'を残し、OPのようにそのディレクトリとその内容をフォルダの内容だけでなくzipアーカイブに保存する必要があるようです – sixty4bit

関連する問題