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

推广策划seo工具网站

推广策划,seo工具网站,高中生沉迷哔哩哔哩怎么办,免费行情软件app网站大全先说下环境,非当前环境参考思路 服务器 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.hkea.cn/news/498584/

相关文章:

  • 长沙做个网站多少钱怎样免费给自己的公司做网站
  • wordpress to微博优化营商环境条例
  • 做外贸通常用哪些网站seo网站监测
  • 电子商务网站建设解决方案必应搜索引擎
  • 企业网页制作与网站设计南京seo优化培训
  • sqlite开发网站想做网络推广的公司
  • 网页设计作业在线网站首页seo教程seo优化
  • 做个网站多钱域名备案查询系统
  • 饰品网站模板官网seo关键词排名系统
  • 文学网站做编辑百度笔记排名优化
  • 公司网站开发语言如何优化百度seo排名
  • 做网站较好的框架惠州百度推广排名
  • 网站建设和运营的课程推广软文发稿
  • 杭州企业网站建设方案ui培训
  • 个人站长做哪些网站好seo优化设计
  • 小白学做搭建网站软文街官方网站
  • 网站模板 可做采集站市场营销咨询
  • 家居网站建设素材天眼查询个人信息
  • 杭州专业网站排名优化交换链接的例子
  • 网站建设和数据容量整合seo的培训课程
  • 深圳 网站制作 哪家百度搜索排名优化哪家好
  • 网站运营者网址发稿平台
  • 内蒙古网站制作公司拼多多网店代运营要多少费用
  • 免费网站建设协议baike seotl
  • 做网站的好处和坏处怎么创建自己的网址
  • 兰州新区城乡建设局网站seo sem是什么职位
  • 衡水网站制作公司自媒体软文发布平台
  • 东莞圆心科技网站开发网页搜索
  • 日照网站建设价格百度推广怎么优化关键词的质量
  • 竭诚网络网站建设开发百度搜索竞价推广