📄 pcltar.lib.php
字号:
// Function : PclTarMerge() // Description : // This function add the content of $p_tarname_add at the end of $p_tarname. // Parameters : // $p_tarname : Name of an existing tar file // $p_tarname_add : Name of an existing tar file taht will be added at the end // of $p_tarname. // $p_mode : 'tar' or 'tgz', if not set, will be determined by $p_tarname extension // $p_mode_add : 'tar' or 'tgz', if not set, will be determined by $p_tarname_add // extension // Return Values : // List of the files contained in the archive. The field status contains // "updated", "not_updated", "added" or "ok" for the files not concerned. // -------------------------------------------------------------------------------- function PclTarMerge($p_tarname, $p_tarname_add, $p_mode="", $p_mode_add="") { TrFctStart(__FILE__, __LINE__, "PclTarMerge", "tar='$p_tarname', tar_add='$p_tarname_add', mode='$p_mode', mode_add='$p_mode_add'"); $v_result=1; // ----- Check the parameters if (($p_tarname == "") || ($p_tarname_add == "")) { // ----- Error log PclErrorLog(-3, "Invalid empty archive name"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); } // ----- Extract the tar format from the extension if (($p_mode == "") || (($p_mode!="tar") && ($p_mode!="tgz"))) { if (($p_mode = PclTarHandleExtension($p_tarname)) == "") { // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return 0; } } if (($p_mode_add == "") || (($p_mode_add!="tar") && ($p_mode_add!="tgz"))) { if (($p_mode_add = PclTarHandleExtension($p_tarname_add)) == "") { // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return 0; } } // ----- Clear filecache clearstatcache(); // ----- Check the file size if ((!is_file($p_tarname)) || (((($v_size = filesize($p_tarname)) % 512) != 0) && ($p_mode=="tar"))) { // ----- Error log if (!is_file($p_tarname)) PclErrorLog(-4, "Archive '$p_tarname' does not exist"); else PclErrorLog(-6, "Archive '$p_tarname' has invalid size ".filesize($p_tarname)."(not a 512 block multiple)"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); } if ((!is_file($p_tarname_add)) || (((($v_size_add = filesize($p_tarname_add)) % 512) != 0) && ($p_mode_add=="tar"))) { // ----- Error log if (!is_file($p_tarname_add)) PclErrorLog(-4, "Archive '$p_tarname_add' does not exist"); else PclErrorLog(-6, "Archive '$p_tarname_add' has invalid size ".filesize($p_tarname_add)."(not a 512 block multiple)"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); } // ----- Look for compressed archive if ($p_mode == "tgz") { // ----- Open the file in read mode if (($p_tar = @gzopen($p_tarname, "rb")) == 0) { // ----- Error log PclErrorLog(-2, "Unable to open file '$p_tarname' in binary read mode"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); } // ----- Open a temporary file in write mode $v_temp_tarname = uniqid("pcltar-").".tmp"; TrFctMessage(__FILE__, __LINE__, 2, "Creating temporary archive file $v_temp_tarname"); if (($v_temp_tar = @gzopen($v_temp_tarname, "wb")) == 0) { // ----- Close tar file gzclose($p_tar); // ----- Error log PclErrorLog(-1, "Unable to open file '$v_temp_tarname' in binary write mode"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); } // ----- Read the first 512 bytes block $v_buffer = gzread($p_tar, 512); // ----- Read the following blocks but not the last one if (!gzeof($p_tar)) { TrFctMessage(__FILE__, __LINE__, 3, "More than one 512 block file"); $i=1; // ----- Read new 512 block and write the already read do{ // ----- Write the already read block $v_binary_data = pack("a512", "$v_buffer"); gzputs($v_temp_tar, $v_binary_data); $i++; TrFctMessage(__FILE__, __LINE__, 3, "Reading block $i"); // ----- Read next block $v_buffer = gzread($p_tar, 512); } while (!gzeof($p_tar)); TrFctMessage(__FILE__, __LINE__, 3, "$i 512 bytes blocks"); } } // ----- Look for uncompressed tar file else if ($p_mode=="tar") { // ----- Open the tar file if (($p_tar = fopen($p_tarname, "r+b")) == 0) { // ----- Error log PclErrorLog(-1, "Unable to open file '$p_tarname' in binary write mode"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); } // ----- Go to the beginning of last block TrFctMessage(__FILE__, __LINE__, 4, "Position before :".($p_mode=="tar"?ftell($p_tar):gztell($p_tar))); fseek($p_tar, $v_size-512); TrFctMessage(__FILE__, __LINE__, 4, "Position after :".($p_mode=="tar"?ftell($p_tar):gztell($p_tar))); } // ----- Look for unknown type else { // ----- Error log PclErrorLog(-3, "Invalid tar mode $p_mode"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); } // ----- Look for type of archive to add if ($p_mode_add == "tgz") { TrFctMessage(__FILE__, __LINE__, 4, "Opening file $p_tarname_add"); // ----- Open the file in read mode if (($p_tar_add = @gzopen($p_tarname_add, "rb")) == 0) { // ----- Error log PclErrorLog(-2, "Unable to open file '$p_tarname_add' in binary read mode"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); } // ----- Read the first 512 bytes block $v_buffer = gzread($p_tar_add, 512); // ----- Read the following blocks but not the last one if (!gzeof($p_tar_add)) { TrFctMessage(__FILE__, __LINE__, 3, "More than one 512 block file"); $i=1; // ----- Read new 512 block and write the already read do{ // ----- Write the already read block $v_binary_data = pack("a512", "$v_buffer"); if ($p_mode=="tar") fputs($p_tar, $v_binary_data); else gzputs($v_temp_tar, $v_binary_data); $i++; TrFctMessage(__FILE__, __LINE__, 3, "Reading block $i"); // ----- Read next block $v_buffer = gzread($p_tar_add, 512); } while (!gzeof($p_tar_add)); TrFctMessage(__FILE__, __LINE__, 3, "$i 512 bytes blocks"); } // ----- Close the files gzclose($p_tar_add); } // ----- Look for uncompressed tar file else if ($p_mode=="tar") { // ----- Open the file in read mode if (($p_tar_add = @fopen($p_tarname_add, "rb")) == 0) { // ----- Error log PclErrorLog(-2, "Unable to open file '$p_tarname_add' in binary read mode"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); } // ----- Read the first 512 bytes block $v_buffer = fread($p_tar_add, 512); // ----- Read the following blocks but not the last one if (!feof($p_tar_add)) { TrFctMessage(__FILE__, __LINE__, 3, "More than one 512 block file"); $i=1; // ----- Read new 512 block and write the already read do{ // ----- Write the already read block $v_binary_data = pack("a512", "$v_buffer"); if ($p_mode=="tar") fputs($p_tar, $v_binary_data); else gzputs($v_temp_tar, $v_binary_data); $i++; TrFctMessage(__FILE__, __LINE__, 3, "Reading block $i"); // ----- Read next block $v_buffer = fread($p_tar_add, 512); } while (!feof($p_tar_add)); TrFctMessage(__FILE__, __LINE__, 3, "$i 512 bytes blocks"); } // ----- Close the files fclose($p_tar_add); } // ----- Call the footer of the tar archive $v_result = PclTarHandleFooter($p_tar, $p_mode); // ----- Look for closing compressed archive if ($p_mode == "tgz") { // ----- Close the files gzclose($p_tar); gzclose($v_temp_tar); // ----- Unlink tar file if (!@unlink($p_tarname)) { // ----- Error log PclErrorLog(-11, "Error while deleting archive name $p_tarname"); } // ----- Rename tar file if (!@rename($v_temp_tarname, $p_tarname)) { // ----- Error log PclErrorLog(-12, "Error while renaming temporary file $v_temp_tarname to archive name $p_tarname"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); } // ----- Return TrFctEnd(__FILE__, __LINE__, $v_result); return $v_result; } // ----- Look for closing uncompressed tar file else if ($p_mode=="tar") { // ----- Close the tarfile fclose($p_tar); } // ----- Return TrFctEnd(__FILE__, __LINE__, $v_result); return $v_result; } // --------------------------------------------------------------------------------// --------------------------------------------------------------------------------// ***** UNDER THIS LINE ARE DEFINED PRIVATE INTERNAL FUNCTIONS *****// ***** *****// ***** THESES FUNCTIONS MUST NOT BE USED DIRECTLY *****// -------------------------------------------------------------------------------- // -------------------------------------------------------------------------------- // Function : PclTarHandleCreate() // Description : // Parameters : // $p_tarname : Name of the tar file // $p_list : An array containing the file or directory names to add in the tar // $p_mode : "tar" for normal tar archive, "tgz" for gzipped tar archive // Return Values : // -------------------------------------------------------------------------------- function PclTarHandleCreate($p_tarname, $p_list, $p_mode, $p_add_dir="", $p_remove_dir="") { TrFctStart(__FILE__, __LINE__, "PclTarHandleCreate", "tar=$p_tarname, list, mode=$p_mode, add_dir='$p_add_dir', remove_dir='$p_remove_dir'"); $v_result=1; $v_list_detail = array(); // ----- Check the parameters if (($p_tarname == "") || (($p_mode != "tar") && ($p_mode != "tgz"))) { // ----- Error log if ($p_tarname == "") PclErrorLog(-3, "Invalid empty archive name"); else PclErrorLog(-3, "Unknown mode '$p_mode'"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); } // ----- Look for tar file if ($p_mode == "tar") { // ----- Open the tar file if (($p_tar = fopen($p_tarname, "wb")) == 0) { // ----- Error log PclErrorLog(-1, "Unable to open file [$p_tarname] in binary write mode"); // ----- Return TrFctEnd(__FILE__, __LINE__, PclErrorCode(), PclErrorString()); return PclErrorCode(); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -