在 Yii 2 中,基于 Hprose 实现 RPC 服务,报错:passthru() has been disabled for security reasons 的解决

1、在本地环境中,在 Postman 中 POST ,http://api.aims-api.localhost/v1/tasks?group_id=015ce30b116ce86058fa6ab4fea4ac63 ,响应成功

{
 "group_id":"015ce30b116ce86058fa6ab4fea4ac63",
 "title":"标题 - 20180809 - 1",
 "source":"xcontent",
 "media_path":"http://www.media_path.com",
 "type":"mc_vca",
 "callback_url":"http://www.callback_url.com",
 "dlurl":"http://www.dlurl.com"
}
{
    "code": 10000,
    "message": "提交任务成功",
    "data": {
        "id": 14,
        "group_id": "015ce30b116ce86058fa6ab4fea4ac63",
        "task_uuid": "B914E6E49B9F11E8872454EE75D2EBC1",
        "title": "标题 - 20180809 - 1",
        "source": "xcontent",
        "media_path": "http://www.media_path.com",
        "dlurl": "http://www.dlurl.com",
        "callback_url": "http://www.callback_url.com",
        "ai_task_type": "mc_vca",
        "ai_task_status": 0,
        "pri": 2,
        "pri_updated_at": 0,
        "status": 1,
        "created_at": 1533797093,
        "updated_at": 1533797093
    }
}

2、在开发环境中,在 Postman 中 POST ,http://wjdev2.chinamcloud.com:8659/v1/tasks?group_id=015ce30b116ce86058fa6ab4fea4ac63 ,响应失败,如图2

图2

{
 "group_id":"015ce30b116ce86058fa6ab4fea4ac63",
 "title":"标题 - 20180809 - 1",
 "source":"xcontent",
 "media_path":"http://www.media_path.com",
 "type":"mc_vca",
 "callback_url":"http://www.callback_url.com",
 "dlurl":"http://www.dlurl.com"
}
{
{
    "name": "Exception",
    "message": "passthru() has been disabled for security reasons",
    "code": 0,
    "type": "Exception",
    "file": "/sobey/www/aims-api/vendor/hprose/hprose/src/Hprose/Client.php",
    "line": 383,
    "stack-trace": [
        "#0 /sobey/www/aims-api/vendor/hprose/hprose/src/Hprose/Client.php(477): Hprose\\Client->decode('Es49\"passthru()...', Array, Object(stdClass))",
        "#1 /sobey/www/aims-api/vendor/hprose/hprose/src/Hprose/Client.php(489): Hprose\\Client->syncInvokeHandler('task_create', Array, Object(stdClass))",
        "#2 /sobey/www/aims-api/vendor/hprose/hprose/src/Hprose/Client.php(103): Hprose\\Client->invokeHandler('task_create', Array, Object(stdClass))",
        "#3 /sobey/www/aims-api/vendor/hprose/hprose/src/Hprose/Client.php(608): Hprose\\Client->Hprose\\{closure}('task_create', Array, Object(stdClass))",
        "#4 /sobey/www/aims-api/vendor/hprose/hprose/src/Hprose/Proxy.php(91): Hprose\\Client->invoke('task_create', Array)",
        "#5 /sobey/www/aims-api/common/logics/rpc/Task.php(106): Hprose\\Proxy->__call('task_create', Array)",
        "#6 /sobey/www/aims-api/common/services/TaskService.php(30): common\\logics\\rpc\\Task->create(Array, '0.0', 'zh-CN')",
        "#7 /sobey/www/aims-api/api/rests/task/CreateAction.php(65): common\\services\\TaskService->create(Object(api\\modules\\v1\\models\\rpc\\Task))",
        "#8 [internal function]: api\\rests\\task\\CreateAction->run()",
        "#9 /sobey/www/aims-api/vendor/yiisoft/yii2/base/Action.php(94): call_user_func_array(Array, Array)",
        "#10 /sobey/www/aims-api/vendor/yiisoft/yii2/base/Controller.php(157): yii\\base\\Action->runWithParams(Array)",
        "#11 /sobey/www/aims-api/vendor/yiisoft/yii2/base/Module.php(528): yii\\base\\Controller->runAction('create', Array)",
        "#12 /sobey/www/aims-api/vendor/yiisoft/yii2/web/Application.php(103): yii\\base\\Module->runAction('v1/task/create', Array)",
        "#13 /sobey/www/aims-api/vendor/yiisoft/yii2/base/Application.php(386): yii\\web\\Application->handleRequest(Object(yii\\web\\Request))",
        "#14 /sobey/www/aims-api/api/web/index.php(17): yii\\base\\Application->run()",
        "#15 {main}"
    ]
}

3、编辑接口(RPC客户端)的 Dockerfile,在 disable_functions 中删除 passthru

FROM registry-vpc.cn-beijing.aliyuncs.com/cmc/centos-nginx112-php71:0.2.4

MAINTAINER wangqiang@chinamcloud.com

RUN sed -i 's/open_basedir = .\/:\/sobey:\/tmp:\/data:\/webtv/;open_basedir = .\/:\/sobey:\/tmp:\/data:\/webtv:\/usr\/local\/php/g' /usr/local/php/etc/php.ini && \
    sed -i 's/allow_url_fopen = Off/allow_url_fopen = On/g' /usr/local/php/etc/php.ini && \
    sed -i 's/disable_functions = exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl,popen,show/disable_functions = system,shell_exec,escapeshellarg,escapeshellcmd,dl,popen,show/g' /usr/local/php/etc/php.ini

COPY code /sobey/www/aims-api
COPY code/build/c_files/ /

RUN chown -R nginx:nginx /sobey/www/ && \
    rm -rf /etc/nginx/conf.d/status.conf && \
    chmod +x /usr/local/bin/composer && \
    cd /sobey/www/aims-api && \
    composer install

4、编辑RPC服务端的 Dockerfile,在 disable_functions 中删除 passthru

FROM registry-vpc.cn-beijing.aliyuncs.com/cmc/centos-nginx112-php71:0.2.4

MAINTAINER wangqiang@chinamcloud.com

RUN sed -i 's/open_basedir = .\/:\/sobey:\/tmp:\/data:\/webtv/;open_basedir = .\/:\/sobey:\/tmp:\/data:\/webtv:\/usr\/local\/php/g' /usr/local/php/etc/php.ini && \
    sed -i 's/allow_url_fopen = Off/allow_url_fopen = On/g' /usr/local/php/etc/php.ini && \
    sed -i 's/disable_functions = exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,dl,popen,show/disable_functions = system,shell_exec,escapeshellarg,escapeshellcmd,dl,popen,show/g' /usr/local/php/etc/php.ini

COPY code /sobey/www/aims-rpc
COPY code/build/c_files/ /

RUN chown -R nginx:nginx /sobey/www/ && \
    rm -rf /etc/nginx/conf.d/status.conf && \
    chmod +x /usr/local/bin/composer && \
    cd /sobey/www/aims-rpc && \
    composer install

5、在开发环境中,在 Postman 中 POST ,http://wjdev2.chinamcloud.com:8659/v1/tasks?group_id=015ce30b116ce86058fa6ab4fea4ac63 ,响应成功

{
 "group_id":"015ce30b116ce86058fa6ab4fea4ac63",
 "title":"标题 - 20180811 - 6",
 "source":"xContent",
 "media_path":"http://www.media_path.com",
 "type":"mc_vca",
 "callback_url":"http://www.callback_url.com",
 "dlurl":"http://www.dlurl.com"
}
{
    "code": 10000,
    "message": "提交任务成功",
    "data": {
        "id": 5,
        "group_id": "015ce30b116ce86058fa6ab4fea4ac63",
        "task_uuid": "D9C9092A9D4711E8AD5E54EE75D2EdC1",
        "title": "标题 - 20180811 - 5",
        "source": "xContent",
        "media_path": "http://www.media_path.com",
        "dlurl": "http://www.dlurl.com",
        "callback_url": "http://www.callback_url.com",
        "ai_task_type": "mc_vca",
        "ai_task_status": 0,
        "pri": 2,
        "pri_updated_at": 0,
        "status": 1,
        "created_at": 1533980458,
        "updated_at": 1533980458
    }
}
永夜