I am converting c# application into php. In that application GZipStream is used but i dont know how to compress and decompress same thing in php.
I am able to compress and zip using php but the problem is, zip file of php and zip file of c# both are different. I want exactly same output like c#.
Both my C# and php code is working but output of both is different. It should be the same.
C# Code:
public static bool CompressDirectory(string sInDir, string sOutFile) { try { string[] sFiles = Directory.GetFiles(sInDir, "*.*", SearchOption.AllDirectories); int iDirLen = sInDir[sInDir.Length - 1] == Path.DirectorySeparatorChar ? sInDir.Length : sInDir.Length + 1; using (FileStream outFile = new FileStream(sOutFile, FileMode.Create, FileAccess.Write, FileShare.None)) using (GZipStream str = new GZipStream(outFile, CompressionMode.Compress)) foreach (string sFilePath in sFiles) { string sRelativePath = sFilePath.Substring(iDirLen); //if (progress != null) // progress(sRelativePath); CompressFile(sInDir, sRelativePath, str); } } catch (System.Exception ex) { PharmaRackMargSynchronizerLog.WriteEntry("CompressDirectory: " + ex.Message, EventLogEntryType.Error); return false; } return true; } static void CompressFile(string sDir, string sRelativePath, GZipStream zipStream) { try { //Compress file name char[] chars = sRelativePath.ToCharArray(); zipStream.Write(BitConverter.GetBytes(chars.Length), 0, sizeof(int)); foreach (char c in chars) zipStream.Write(BitConverter.GetBytes(c), 0, sizeof(char)); //Compress file content byte[] bytes = File.ReadAllBytes(Path.Combine(sDir, sRelativePath)); zipStream.Write(BitConverter.GetBytes(bytes.Length), 0, sizeof(int)); zipStream.Write(bytes, 0, bytes.Length); } catch (System.Exception ex) { PharmaRackMargSynchronizerLog.WriteEntry("CompressFile: " + ex.Message, EventLogEntryType.Error); } } What I tried in PHP to so same thing, I have used gzcompress function for that then after compressing file content i am using ZipArchive to zip file. I am able to create encoding and zip both here but output of php's zip and output of C#'s zip are different. i want it to be same.
PHP Code:
// create zip file $cfilename = REPORTPATH . $_SERVER['HTTP_DISTRIBUTORAPIKEY'] . "\\" . $_SERVER['HTTP_DISTRIBUTORAPIKEY'] . "_Firms.csv"; $zipname = date('m-d-Y_H_i_s') . '.zip'; $zip = new ZipArchive(); $zip->open($_SERVER['DOCUMENT_ROOT'] . "/api.pharmarack.com/distributors/" . $_SERVER['HTTP_DISTRIBUTORAPIKEY'] . "/" . $zipname, ZipArchive::CREATE); // gzcompress compressiong process $compressedstring = gzcompress(base64_encode(file_get_contents($cfilename)) , 9); // $uncompressed = gzuncompress($compressedstring); // echo $uncompressed;die; $zip->addFromString($cfilename, $compressedstring); // $zip->addFile($cfilename); $zip->close(); // End of Create Zip File