在 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
{ "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 } }
近期评论