PHPOffice / PHPWord

A pure PHP library for reading and writing word processing documents
https://phpoffice.github.io/PHPWord/
Other
7.16k stars 2.68k forks source link

ZipArchive::close(): Renaming temporary file failed: Permission denied{ "message": "Invalid or uninitialized Zip object" #2613

Open ozilion opened 1 month ago

ozilion commented 1 month ago

Hi all,

I am trying integrating old PHP project into Laravel v10 and using PHPWord v1.2.

I have PHPWord v0.17 in old project and using TemplateProcessor without any problem and creating all my Word files (5 to 20 files depending criteria) successfully, but while integrating to Laravel + PHPWord v1.2 I am getting error "ZipArchive::close(): Renaming temporary file failed: Permission denied{ "message": "Invalid or uninitialized Zip object"," for some files and it fails to create files randomly and sometimes it works correctly without any issue. I know the template file is ok and can be opened without any issue and works in old project.

Here is the function i use for teh templating, I call it for each file i need to create with an order.

public function setDosyasiOlustur($filem, $newFilem, $pot, $setpath, $canzipped = false, $asama = "")
  {
    try {
      $pati = $setpath;
      $a1sahaliste9 = array("01", "02", "03", "05", "09", "11", "12", "13", "14", "15", "18", "19", "20", "21", "22", "24", "25", "26", "28", "33", "37", "38");
      $a1sahaliste14 = array("01", "02", "03", "04", "05", "07", "09", "10", "11", "12", "13", "15", "16", "17", "20", "21", "24", "25", "26", "28", "29", "35", "36", "38", "39");
      $a1sahaliste45 = array("01", "02", "03", "04", "05", "06", "07", "09", "10", "11", "12", "13", "17", "24", "25", "26", "27", "28", "29", "30", "31", "34", "35", "36", "37", "38", "39");

      $pot["iso900115varyok"] = isset($pot["iso900115varyok"]) ? $pot["iso900115varyok"] : 0;
      $pot["iso1400115varyok"] = isset($pot["iso1400115varyok"]) ? $pot["iso1400115varyok"] : 0;
      $pot["iso2200018varyok"] = isset($pot["iso2200018varyok"]) ? $pot["iso2200018varyok"] : 0;
      $pot["iso450001varyok"] = isset($pot["iso450001varyok"]) ? $pot["iso450001varyok"] : 0;
      $pot["iso50001varyok"] = isset($pot["iso50001varyok"]) ? $pot["iso50001varyok"] : 0;
      $pot["iso27001varyok"] = isset($pot["iso27001varyok"]) ? $pot["iso27001varyok"] : 0;
      $pot["helalvaryok"] = isset($pot["helalvaryok"]) ? $pot["helalvaryok"] : 0;
      $pot["oicsmiik6varyok"] = isset($pot["oicsmiik6varyok"]) ? $pot["oicsmiik6varyok"] : 0;
      $pot["oicsmiik9varyok"] = isset($pot["oicsmiik9varyok"]) ? $pot["oicsmiik9varyok"] : 0;
      $pot["oicsmiik171varyok"] = isset($pot["oicsmiik171varyok"]) ? $pot["oicsmiik171varyok"] : 0;
      $pot["oicsmiik23varyok"] = isset($pot["oicsmiik23varyok"]) ? $pot["oicsmiik23varyok"] : 0;
      $pot["oicsmiik24varyok"] = isset($pot["oicsmiik24varyok"]) ? $pot["oicsmiik24varyok"] : 0;
      $pot["entegreysvarmi"] = isset($pot["indartentvarmi"]) ? $pot["indartentvarmi"] : 0;

      if ($this->doc == "") {
        Settings::loadConfig();
        Settings::setTempDir(public_path() . "/temp");
        Settings::setOutputEscapingEnabled(true);
        Settings::setCompatibility(true);

        $this->doc = new TemplateProcessor($filem);
        $this->doc->setMacroOpeningChars("æ");
        $this->doc->setMacroClosingChars("æ");
        $this->doc->setMacroChars("æ", "æ");
      }

//      echo Settings::getTempDir();
      if ($pot["iso900115varyok"] == 0) {
        $this->doc->deleteBlock('deletekys');
      }
      if ($pot["iso1400115varyok"] == 0) {
        $this->doc->deleteBlock('deletecys');
      }
      if ($pot["iso2200018varyok"] == 0) {
        $this->doc->deleteBlock('deleteggys18');
      }
      if ($pot["helalvaryok"] == 0) {
        $this->doc->deleteBlock('deleteoicsmiic');
      }
      if ($pot["oicsmiik6varyok"] == 0) {
        $this->doc->deleteBlock('deleteoicsmiic6');
      }
      if ($pot["oicsmiik9varyok"] == 0) {
        $this->doc->deleteBlock('deleteoicsmiic9');
      }
      if ($pot["oicsmiik171varyok"] == 0) {
        $this->doc->deleteBlock('deleteoicsmiic171');
      }
      if ($pot["oicsmiik23varyok"] == 0) {
        $this->doc->deleteBlock('deleteoicsmiic23');
      }
      if ($pot["oicsmiik24varyok"] == 0) {
        $this->doc->deleteBlock('deleteoicsmiic24');
      }
      if ($pot["iso4500118varyok"] == 0) {
        $this->doc->deleteBlock('deleteo4500118');
      }
      if ($pot["iso5000118varyok"] == 0) {
        $this->doc->deleteBlock('deleteo5000118');
      }
      if ($pot["iso27001varyok"] == 0) {
        $this->doc->deleteBlock('delete2700122');
      }

      if (isset($pot["iso900115varyok"]) && $pot["iso900115varyok"] == 1) $this->doc->setCheckboxMS('w:name="iso900115varyok"', true);
      if (isset($pot["iso1400115varyok"]) && $pot["iso1400115varyok"] == 1) $this->doc->setCheckboxMS('w:name="iso1400115varyok"', true);
      if (isset($pot["iso4500118varyok"]) && $pot["iso4500118varyok"] == 1) $this->doc->setCheckboxMS('w:name="iso4500118varyok"', true);
      if (isset($pot["iso5000118varyok"]) && $pot["iso5000118varyok"] == 1) $this->doc->setCheckboxMS('w:name="iso5000118varyok"', true);
      if (isset($pot["iso2200018varyok"]) && $pot["iso2200018varyok"] == 1) $this->doc->setCheckboxMS('w:name="iso2200018varyok"', true);
      if (isset($pot["iso2200018varyok"]) && $pot["iso2200018varyok"] == 1) $this->doc->setCheckboxMS('w:name="abirsaha"', true);
      if (isset($pot["iso50001varyok"]) && $pot["iso50001varyok"] == 1) $this->doc->setCheckboxMS('w:name="abirsaha"', true);
      if (isset($pot["helalvaryok"]) && $pot["helalvaryok"] == 1) $this->doc->setCheckboxMS('w:name="helalvaryok"', true);
      if (isset($pot["oicsmiik6varyok"]) && $pot["oicsmiik6varyok"] == 1) $this->doc->setCheckboxMS('w:name="oicsmiik6varyok"', true);
      if (isset($pot["oicsmiik9varyok"]) && $pot["oicsmiik9varyok"] == 1) $this->doc->setCheckboxMS('w:name="oicsmiik9varyok"', true);
      if (isset($pot["oicsmiik171varyok"]) && $pot["oicsmiik171varyok"] == 1) $this->doc->setCheckboxMS('w:name="oicsmiik171varyok"', true);
      if (isset($pot["oicsmiik23varyok"]) && $pot["oicsmiik23varyok"] == 1) $this->doc->setCheckboxMS('w:name="oicsmiik23varyok"', true);
      if (isset($pot["oicsmiik23varyok"]) && $pot["oicsmiik23varyok"] == 1) $this->doc->setCheckboxMS('w:name="oicsmiik24varyok"', true);
      if (isset($pot["digersistemlerneler"]) && $pot["digersistemlerneler"] != "") $this->doc->setCheckboxMS('w:name="digervaryok"', true);
      if (isset($pot["entegreysvarmi"]) && $pot["entegreysvarmi"] == 1) $this->doc->setCheckboxMS('w:name="entegreysvarmi"', true);
      if (isset($pot["yonetimsistemsertifikasi"]) && $pot["yonetimsistemsertifikasi"] == "1") $this->doc->setCheckboxMS('w:name="yonetimsistemievet"', true);
      if (isset($pot["yonetimsistemsertifikasi"]) && $pot["yonetimsistemsertifikasi"] == "0") $this->doc->setCheckboxMS('w:name="yonetimsistemihayir"', true);
      if (isset($pot["tumvardayni"]) && $pot["tumvardayni"] == "EVET") $this->doc->setCheckboxMS('w:name="tumvardaynievet"', true);
      if (isset($pot["tumvardayni"]) && $pot["tumvardayni"] == "HAYIR") $this->doc->setCheckboxMS('w:name="tumvardaynihayir"', true);
      if (isset($pot["belgedurum"]) && $pot["belgedurum"] == "iptal") $this->doc->setCheckboxMS('w:name="belgeiptal"', true);
      if (isset($pot["belgedurum"]) && $pot["belgedurum"] == "aski") $this->doc->setCheckboxMS('w:name="belgeaski"', true);
      if (isset($pot["belgedurum"]) && $pot["belgedurum"] == "askiindir") $this->doc->setCheckboxMS('w:name="belgeaskiindir"', true);
      if (isset($pot["belgedurum"]) && $pot["belgedurum"] == "devam") $this->doc->setCheckboxMS('w:name="belgeok"', true);
      if (isset($pot["belgedurum"]) && $pot["belgedurum"] == "devam") $this->doc->setCheckboxMS('w:name="belgeaski"', false);
      if (isset($pot["belgedurum"]) && $pot["belgedurum"] == "devam") $this->doc->setCheckboxMS('w:name="belgeaskiindir"', false);
      if (isset($pot["subeturu1"]) && $pot["subeturu1"] == "1") $this->doc->setCheckboxMS('w:name="subeturu1"', true);
      if (isset($pot["subeturu1"]) && $pot["subeturu1"] == "2") $this->doc->setCheckboxMS('w:name="subeturu1"', true);
      if (isset($pot["subeturu2"]) && $pot["subeturu2"] == "1") $this->doc->setCheckboxMS('w:name="subeturu2"', true);
      if (isset($pot["subeturu2"]) && $pot["subeturu2"] == "2") $this->doc->setCheckboxMS('w:name="subeturu2"', true);
      if (isset($pot["subeturu3"]) && $pot["subeturu3"] == "1") $this->doc->setCheckboxMS('w:name="subeturu3"', true);
      if (isset($pot["subeturu3"]) && $pot["subeturu3"] == "2") $this->doc->setCheckboxMS('w:name="subeturu3"', true);
      if (isset($pot["subeturu4"]) && $pot["subeturu4"] == "1") $this->doc->setCheckboxMS('w:name="subeturu4"', true);
      if (isset($pot["subeturu4"]) && $pot["subeturu4"] == "2") $this->doc->setCheckboxMS('w:name="subeturu4"', true);
      //ENTEGRE SİSTEM SEÇENEKLERİ
      if (isset($pot["ygg"]) && $pot["ygg"] == "12.5") $this->doc->setCheckboxMS('w:name="ygg"', true);
      if (isset($pot["icdenetim"]) && $pot["icdenetim"] == "12.5") $this->doc->setCheckboxMS('w:name="icdenetim"', true);
      if (isset($pot["entegredokumantasyon"]) && $pot["entegredokumantasyon"] == "12.5") $this->doc->setCheckboxMS('w:name="entegredokumantasyon"', true);
      if (isset($pot["duzelticifaaliyet"]) && $pot["duzelticifaaliyet"] == "12.5") $this->doc->setCheckboxMS('w:name="duzelticifaaliyet"', true);
      if (isset($pot["yondessor"]) && $pot["yondessor"] == "12.5") $this->doc->setCheckboxMS('w:name="yondessor"', true);
      if (isset($pot["prosesentegre"]) && $pot["prosesentegre"] == "12.5") $this->doc->setCheckboxMS('w:name="prosesentegre"', true);
      if (isset($pot["politikahedefler"]) && $pot["politikahedefler"] == "12.5") $this->doc->setCheckboxMS('w:name="politikahedefler"', true);
      if (isset($pot["riskyonetimyaklasimi"]) && $pot["riskyonetimyaklasimi"] == "12.5") $this->doc->setCheckboxMS('w:name="riskyonetimyaklasimi"', true);
      // abirsaha  // abirofis

      $this->doc->setCheckboxMS('w:name="abirsaha"', false);
      $this->doc->setCheckboxMS('w:name="abirofis"', true);

      foreach ($a1sahaliste9 as $key => $value) {
        if ($pot["iso900115varyok"] == 1 && intval($pot["eakodu"]) == intval($value)) $this->doc->setCheckboxMS('w:name="abirsaha"', true);
        if ($pot["iso900115varyok"] == 1 && intval($pot["eakodu"]) == intval($value)) $this->doc->setCheckboxMS('w:name="abirofis"', false);
      }
      foreach ($a1sahaliste14 as $key => $value) {
        if ($pot["iso1400115varyok"] == 1 && intval($pot["eakodu"]) == intval($value)) $this->doc->setCheckboxMS('w:name="abirsaha"', true);
        if ($pot["iso1400115varyok"] == 1 && intval($pot["eakodu"]) == intval($value)) $this->doc->setCheckboxMS('w:name="abirofis"', false);
      }
      foreach ($a1sahaliste45 as $key => $value) {
        if ($pot["iso4500118varyok"] == 1 && intval($pot["eakodu"]) == intval($value)) $this->doc->setCheckboxMS('w:name="abirsaha"', true);
        if ($pot["iso4500118varyok"] == 1 && intval($pot["eakodu"]) == intval($value)) $this->doc->setCheckboxMS('w:name="abirofis"', false);
      }

      if ($pot["iso2200018varyok"] == 1 || $pot["helalvaryok"] == 1 || $pot["oicsmiik6varyok"] == 1 || $pot["oicsmiik9varyok"] == 1 || $pot["oicsmiik171varyok"] == 1 || $pot["oicsmiik23varyok"] == 1 || $pot["oicsmiik24varyok"] == 1) {
        $this->doc->setCheckboxMS('w:name="abirsaha"', true);
        $this->doc->setCheckboxMS('w:name="abirofis"', false);
      }
//            var_dump($pot);
      foreach ($pot as $name => $value) {
        if ($name === "id") continue;
//                echo $name." = ". $value."<br>";
        $this->doc->setValue(strtolower($name), $value);
//                echo $name . " = " . $value . "<br>";
      }

      if (!file_exists($pati)) {
        if (!self::mkdirr($pati)) {
          self::msgError($pati . " dizini oluşturulamadı...", false);
        }
      }

//        echo $this->clearLocale($newFilem);
      $fname = $pati . '/' . iconv("UTF-8", "ISO-8859-9", $newFilem);
      if (file_exists($fname)) {
        unlink($fname);
      }
      $this->doc->saveAs($fname);
      $this->doc = "";

//      rename($fname, "{$fname}");

      $fname1 = "../setler/" . $pot["planno"] . "/" . $asama . "/" . iconv("ISO-8859-9", "UTF-8", $newFilem);
      echo '<a href="' . route("downloadWordFile", ['pno'=>$pot["planno"], 'asama'=>$asama, 'dosya'=>iconv("ISO-8859-9", "UTF-8", $newFilem)]) . '" class="col-sm-12 btn btn-success btn-sm" target="_blank">' . iconv("ISO-8859-9", "UTF-8", $newFilem) . '</a><br>';
      if ($canzipped) $this->canzip = $canzipped;
    } catch (Exception $e) {
      echo $e->getMessage();
    }
  }

Any help appreciated to solve this.

Regards,