我有一个脚本,可以在其中更改ZIP文件的名称,一次替换其中的一个单词,然后向其中添加文件。 StackOverflow上的人员足够有帮助我,而且效果很好。
只有一个大问题。当我在Web服务器上提取ZIP文件时,所有文件的密码修改都不正确。
所有文件和文件夹均为chmod666。我必须手动将文件夹的chmod更改为755,并将文件的chmod更改为644。
更改ZIP内的文件是否会更改文件的chmod?如果是这样,在脚本运行后如何正确修改这些文件?
这是我用来更改ZIP文件名(从中删除www。以便我用来添加文件的另一个脚本可以正常工作)并更改其中文件的代码。
$search='var1';
$replace='var2';
echo "ZIP files successfully renamed:<br>";
$directory =__DIR__ . '/zips/';
foreach (glob($directory."www.*.zip") as $filename) {
$file = realpath($filename);
rename($file, str_replace("www.","",$file));
$file2 = str_replace('C:\path\to\folder/zips/','',$filename);
$file3 = str_replace('www.','',$file2);
echo "$file2 -> $file3<br>";
}
function modifyzip($archive,$search,$replace){
$zip = new ZipArchive();
$status = $zip->open( $archive );
if( $status == true ){
/* Get the count of files BEFORE the loop */
$filecount = $zip->numFiles;
for( $i=0; $i < $filecount; $i++ ){
$name = $zip->getNameIndex( $i );
$content = $zip->getFromName( $name );
$edited = str_replace( $search, $replace, $content );
$zip->deleteName( $name );
$zip->addFromString( $name, $edited );
}
}
$zip->close();
}
echo "<br><br>ZIP files successfully changed var1 to var2:<br>";
$dir=__DIR__ . '/zips/';
$col=glob( $dir . '*.zip' );
if( $col && count( $col ) > 0 ){
foreach( $col as $archive ){
call_user_func( 'modifyzip',$archive,$search,$replace );
$archive2 = str_replace('C:\path\to\folder/zips/','',$archive);
echo "$archive2<br>";
}
}
谢谢您的帮助!