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