Неправильный ZIP-файл chmod после распаковки (PHP) - PullRequest
0 голосов
/ 25 августа 2018

У меня есть скрипт, в котором я меняю имя ZIP-файла, заменяю слово в них сразу, а затем добавляю в них файл.Люди в StackOverflow были достаточно любезны, чтобы помочь мне, и это прекрасно работает.

Только одна большая проблема.Когда я распаковываю ZIP-файлы на веб-сервере, все файлы неправильно изменяются в chmod.

Все файлы и папки имеют вид chmod 666. И мне приходится вручную изменять chmod папки до 755, а файлы до 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>";
}


}

Спасибо за помощь!

...