当前位置: 首页 > news >正文

微商城网站建设推广网络设计师证怎么考

微商城网站建设推广,网络设计师证怎么考,广东东莞最新病例,网站首页排名下降先说下环境,非当前环境参考思路 服务器 centos 6php版本 5.5.39调用java写的soap服务器开启soap缓存出现的问题是, 运行一段时间后就会随机报异常 PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldnt load from http://xxxxxxxx?wsdl : failed to l…
先说下环境,非当前环境参考思路
  • 服务器 centos 6
  • php版本 5.5.39
  • 调用java写的soap服务器
  • 开启soap缓存
  • 出现的问题是, 运行一段时间后就会随机报异常
 PHP Fatal error:  SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://xxxxxxxx?wsdl' : failed to load external entity'http://xxxxxxxx?wsdl'
解决方法
  1. php 代码中soap调用之前加上libxml_disable_entity_loader,如下情况。
libxml_disable_entity_loader(false);
$soap = new SoapClient(“http://xxx?wsdl”);
  1. 增加系统配置: /etc/sysctl.conf
vim /etc/sysctl.conf# 允许重用处于 TIME-WAIT 状态的 TCP 连接net.ipv4.tcp_tw_reuse = 1# 设置 FIN-WAIT-2 状态连接的超时时间为 30 秒net.ipv4.tcp_fin_timeout = 30sudo sysctl -p


排查方法

  1. wsdl 是协议文档,建立连接的时候需要去读取xml。而php源码中是这样描述的:
xmlDocPtr soap_xmlParseFile(const char *filename TSRMLS_DC)
{old_allow_url_fopen = PG(allow_url_fopen);PG(allow_url_fopen) = 1;ctxt = xmlCreateFileParserCtxt(filename);PG(allow_url_fopen) = old_allow_url_fopen;if (ctxt) {zend_bool old;ctxt->keepBlanks = 0;ctxt->sax->ignorableWhitespace = soap_ignorableWhitespace;ctxt->sax->comment = soap_Comment;ctxt->sax->warning = NULL;ctxt->sax->error = NULL;
#if LIBXML_VERSION >= 20703ctxt->options |= XML_PARSE_HUGE;
#endifold = php_libxml_disable_entity_loader(1 TSRMLS_CC);xmlParseDocument(ctxt);php_libxml_disable_entity_loader(old TSRMLS_CC);if (ctxt->wellFormed) {ret = ctxt->myDoc;if (ret->URL == NULL && ctxt->directory != NULL) {ret->URL = xmlCharStrdup(ctxt->directory);}} else {ret = NULL;xmlFreeDoc(ctxt->myDoc);ctxt->myDoc = NULL;}xmlFreeParserCtxt(ctxt);} else {ret = NULL;}

PG(allow_url_fopen) = 1; 这段代码必须允许读取远程资源。
xmlCreateFileParserCtxt 默认情况下只允许打开本地的xml。以上配合使用才可以读取远程xml。
原理是php的流封装器(Stream Wrappers)机制,它允许 PHP 使用统一的接口处理不同类型的流(如文件、HTTP、FTP 等)。
而又因为以下3行代码,明确了是不允许加载外部xml的。因此可以推测在xmlCreateFileParserCtxt 函数的时候要设置允许加载外部xml

old = php_libxml_disable_entity_loader(1 TSRMLS_CC);
xmlParseDocument(ctxt);
php_libxml_disable_entity_loader(old TSRMLS_CC);

验证推测, 采用以下php代码, 强制禁用远程xml,且不允许缓存

<?php
libxml_disable_entity_loader(true);
try {$crmapiurl='http://xxx?wsdl';$soap = new SoapClient($crmapiurl, ['trace' => true,'cache_wsdl' =>  WSDL_CACHE_NONE,]);
} catch (SoapFault $fault) {var_dump($fault);
}

测试结果直接报错

 PHP Fatal error:  SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://xxxxxxxx?wsdl' : failed to load external entity'http://xxxxxxxx?wsdl'

而把libxml_disable_entity_loader(false); 就可以正常运行
由此得出结论, soap使用wsdl的时候, 一定要加libxml_disable_entity_loader(false);
顺便说一句, 没有设置这个却还能正常运行的原因是读取了缓存

  1. 错误原因描述:在fpm运行一段时间后, 开始报之前的错误, 但是重启fpm就恢复正常
    • 推测重启后进程结束,说明资源被释放
    • 而运行一段时间后又开始以上报错,反复如此
    • php代码中, soap是作为客户端去访问java服务器
      以上三点可以得出,当fpm把请求执行完之后,soap的相关资源是没有被释放的,然后重复请求会建立多个TCP请求,随着时间增加,服务器的资源被消耗完,解决方式就是使用 net.ipv4.tcp_tw_reuse 进行tcp的复用,减少链接就可以
http://www.yayakq.cn/news/406104/

相关文章:

  • 郑州数码网站建设服务公司儿童网站源码
  • 网站建设丿找vx cp5173wordpress创建论坛
  • 一流的低价网站建设网时代it培训官网
  • 一键建站平台模板网站建设的弊端
  • 响应式网站介绍地方门户系统源码
  • 太子河网站建设江西网站开发方案
  • 创建网站赚钱网站开发需要兼容到ie几
  • 深圳哪里可以做网站天津装饰公司排行榜前十位有哪些
  • 西安企业建站系统模板企业型网站建设怎样收费
  • 网站后台管理系统登录wordpress portal
  • 网站克隆好后该怎么做哪个网站有做电箱电柜的图纸
  • 做外贸网站需要注意些什么问题衡水做wap网站费用
  • 上线了免费建网站西安网站推广
  • 网站建设一般预付比例多少好看logo图片
  • 做推文封面的网站直播网站的建设
  • 网站建设ssc源码西方设计网站
  • 行业做门户网站挣钱吗建设一个网站需要哪些费用吗
  • 一个公司做两个网站可以吗中文域名的价值
  • 网站快速注册手机上怎么审营业执照
  • 做擦边球视频网站怎么制作微信小程序商城
  • 张家界企业网站制作seo引擎搜索网站
  • 重庆网站制作权威乐云践新wordpress 自定义rss
  • 做网站专业的公司怎么做网站镜像
  • 免费做拍卖网站wordpress字体颜色
  • 17我们一起做网站电商设计英文
  • 卖汽车的网站怎么做中小企业网络设计与实现
  • 如何购买网站主机网络科技公司劳动合同
  • 创意礼品做的比较好的网站广告公司资质
  • 医院网站建设网站福永外贸网站建设公司
  • 半成品公司 网站如何找推广平台