Fork me on GitHub

通过嵌入式SAPI重新包装CLI

  在PHP 嵌入式 SAPI中我们把PHP嵌入到自己的程序当中,现在我们在这个基础上包装一个CLI

php_embed.c:

#include <stdio.h>
#include <sapi/embed/php_embed.h>
int main(int argc, char *argv[])
{
    zend_file_handle    script;

    /* 基本的参数检查 */ 
    if ( argc <= 1 ) {
        fprintf(stderr, "Usage: %s <filename.php> <arguments>
", argv[0]);
        return -1; 
    }

    /* 设置文件处理结构 */
    script.type=ZEND_HANDLE_FP;
    script.filename=argv[1];
    script.opened_path=NULL;
    script.free_filename=0;
    if ( !(script.handle.fp = fopen(script.filename, "rb")) ) {
        fprintf(stderr, "Unable to open: %s
", argv[1]);
        return -1; 
    }

    /* 在将命令行参数注册给php时(php中的$argv/$argc), 忽略第一个命令行参数, 因为它对php脚本无意义 */
    argc --;
    argv ++;
    PHP_EMBED_START_BLOCK(argc, argv)
        php_execute_script(&script TSRMLS_CC);
    PHP_EMBED_END_BLOCK()

    return 0;
}

标签: php, sapi, cli

添加新评论