MO::export_to_file_handle()

最后更新于:2021-11-25 20:29:40

MO::export_to_file_handle( resource$fh)

参数

$fh

(resource) (Required)

响应

(true)

源文件

文件: gc-includes/pomo/mo.php

		function export_to_file_handle( $fh ) {
			$entries = array_filter( $this->entries, array( $this, 'is_entry_good_for_export' ) );
			ksort( $entries );
			$magic                     = 0x950412de;
			$revision                  = 0;
			$total                     = count( $entries ) + 1; // All the headers are one entry.
			$originals_lenghts_addr    = 28;
			$translations_lenghts_addr = $originals_lenghts_addr + 8 * $total;
			$size_of_hash              = 0;
			$hash_addr                 = $translations_lenghts_addr + 8 * $total;
			$current_addr              = $hash_addr;
			fwrite(
				$fh,
				pack(
					'V*',
					$magic,
					$revision,
					$total,
					$originals_lenghts_addr,
					$translations_lenghts_addr,
					$size_of_hash,
					$hash_addr
				)
			);
			fseek( $fh, $originals_lenghts_addr );

			// Headers' msgid is an empty string.
			fwrite( $fh, pack( 'VV', 0, $current_addr ) );
			$current_addr++;
			$originals_table = "";

			$reader = new POMO_Reader();

			foreach ( $entries as $entry ) {
				$originals_table .= $this->export_original( $entry ) . "";
				$length           = $reader->strlen( $this->export_original( $entry ) );
				fwrite( $fh, pack( 'VV', $length, $current_addr ) );
				$current_addr += $length + 1; // Account for the NULL byte after.
			}

			$exported_headers = $this->export_headers();
			fwrite( $fh, pack( 'VV', $reader->strlen( $exported_headers ), $current_addr ) );
			$current_addr      += strlen( $exported_headers ) + 1;
			$translations_table = $exported_headers . "";

			foreach ( $entries as $entry ) {
				$translations_table .= $this->export_translations( $entry ) . "";
				$length              = $reader->strlen( $this->export_translations( $entry ) );
				fwrite( $fh, pack( 'VV', $length, $current_addr ) );
				$current_addr += $length + 1;
			}

			fwrite( $fh, $originals_table );
			fwrite( $fh, $translations_table );
			return true;
		}