• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/zip.php
  • Класс: CZip
  • Вызов: CZip::_writeCentralFileHeader
private function _writeCentralFileHeader($arHeader)
{
	$res = 1;

	//to be checked: for(reset($arHeader); $key = key($arHeader); next($arHeader)) {}

	//convert unix mtime to dos mdate/mtime
	$date = getdate($arHeader['mtime']);
	$mtime = ($date['hours'] << 11) + ($date['minutes'] << 5) + $date['seconds'] / 2;
	$mdate = (($date['year'] - 1980) << 9) + ($date['mon'] << 5) + $date['mday'];

	//pack data
	$binary_data = pack("VvvvvvvVVVvvvvvVV",
		0x02014b50,
		$arHeader['version'],
		$arHeader['version_extracted'],
		$arHeader['flag'],
		$arHeader['compression'],
		$mtime,
		$mdate,
		$arHeader['crc'],
		$arHeader['compressed_size'],
		$arHeader['size'],
		strlen($arHeader['stored_filename']),
		$arHeader['extra_len'],
		$arHeader['comment_len'],
		$arHeader['disk'],
		$arHeader['internal'],
		$arHeader['external'],
		$arHeader['offset']);

	//write 42 bytes of the header in the zip file
	fputs($this->zipfile, $binary_data, 46);

	//variable fields
	if ($arHeader['stored_filename'] <> '')
	{
		fputs($this->zipfile, $arHeader['stored_filename'], strlen($arHeader['stored_filename']));
	}
	if ($arHeader['extra_len'] != 0)
	{
		fputs($this->zipfile, $arHeader['extra'], $arHeader['extra_len']);
	}
	if ($arHeader['comment_len'] != 0)
	{
		fputs($this->zipfile, $arHeader['comment'], $arHeader['comment_len']);
	}

	return $res;
}