/** * Uloží přílohu nahranou pomocí plupload * @param type $id_clanku */ public function ulozitPrilohu($id_clanku) { @set_time_limit(5 * 60); //určit a případně vytvořit adresář $adresare = $this->redakce->najit_adresare($id_clanku, TRUE); $targetDir = $adresare['target_adresar']; $nahledy_adresar = $adresare['nahledy_adresar']; $cleanupTargetDir = true; $maxFileAge = 5 * 3600; if (isset($_REQUEST["name"])) { $fileName = $_REQUEST["name"]; } elseif (!empty($_FILES)) { $fileName = $_FILES["file"]["name"]; } else { $fileName = uniqid("file_"); } $filePath = $targetDir . '/' . $fileName; $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0; $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0; // Remove old temp files if ($cleanupTargetDir) { if (!is_dir($targetDir) || !($dir = opendir($targetDir))) { die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}'); } while (($file = readdir($dir)) !== false) { $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file; // If temp file is current file proceed to the next if ($tmpfilePath == "{$filePath}.part") { continue; } // Remove temp file if it is older than the max age and is not the current file if (preg_match('/\\.part$/', $file) && filemtime($tmpfilePath) < time() - $maxFileAge) { @unlink($tmpfilePath); } } closedir($dir); } // Open temp file if (!($out = @fopen("{$filePath}.part", $chunks ? "ab" : "wb"))) { die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}'); } if (!empty($_FILES)) { if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) { die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}'); } // Read binary input stream and append it to temp file if (!($in = @fopen($_FILES["file"]["tmp_name"], "rb"))) { die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); } } else { if (!($in = @fopen("php://input", "rb"))) { die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); } } while ($buff = fread($in, 4096)) { fwrite($out, $buff); } @fclose($out); @fclose($in); // Check if file has been uploaded if (!$chunks || $chunk == $chunks - 1) { // Strip the temp .part suffix off rename("{$filePath}.part", $filePath); } //vytvoření náhledu $mime_type_obr = $this->redakce->prilohy->obrazky; if (in_array(mime_content_type($filePath), $mime_type_obr)) { if (preg_match('~_tn_.*~', $fileName)) { $this->redakce->vytvorit_nahled($filePath, $nahledy_adresar . '/' . $fileName); } else { $this->redakce->vytvorit_nahled($filePath, $nahledy_adresar . '/_tn_' . $fileName); } if (!$this->redakce->findClanekById($this->id_clanku)->obr) { $this->redakce->nastavitHlavniObr($this->id_clanku, $fileName); } if (!$this->redakce->jeObrTopClanek($this->id_clanku)) { $this->redakce->nastavitObrTopClanek($this->id_clanku, $fileName); } } $this->logg('k clanku ' . $id_clanku . ' nahrana priloha ' . $fileName); // Return Success JSON-RPC response die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}'); }