INI设置
在micro主版本号1之前,下面用到的magic可能发生变化。
micro通过特殊的magic来标识INI文件头,通过INI文件头可以实现micro带INI启动。
一个带INI的micro自执行文件的结构:
|--------------------------|--------------------------------------------------------------------|----------------------| | micro.sfx ELF/PE 头 | ini 部分 | php/phar code | | | | | | | | micro_get_sfx_filesize() | 4 byte magic | 4 byte sizeof(ini text) | n byte ini text | | | 返回这个大小 | "\xfd\xf6\x69\xe6" | "\0\0\0\x10"(大端序的16) | "ini_key=\"value\"" | "<?php things();..." | |--------------------------|--------------------------------------------------------------------|----------------------| ^ micro_open_self() 返回的文件从这里开始 | fopen(__FILE__) 返回的文件从这里开始 ^ ini文件头为
struct MICRO_INI_HEADER{ uint32_t magic; // "\xfd\xf6\x69\xe6" uint32_t size; // in big-endian } __attribute__((packed)); 例如:使用以下php代码来生成ini头:
$myini = " ffi.enable=1 micro.php_binary=cafebabe " $f=fopen("myiniheader.bin", "wb"); fwrite($f, "\xfd\xf6\x69\xe6"); fwrite($f, pack("N", strlen($myini))); fwrite($f, $myini); fclose($f); 然后执行
Windows (CMD):
COPY /B micro.sfx + myiniheader.bin + myawesomeapp.phar myawesomeapp.exe Windows的Powershell里COPY命令不能这么用,由于存在比较麻烦的codepage问题,建议使用CMD或者PHP脚本来进行拼接。
Unix:
cat micro.sfx myiniheader.bin myawesomeapp.phar > myawesomeapp chmod 0755 myawesomeapp 来生成带INI设置的micro自执行文件