当前位置: 首页 > 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/155851/

相关文章:

  • 网站模型怎么做的有哪些做短租的网站
  • 网站改版申请wordpress 不能更换主题
  • 免费域名如何建站公司网站建设项目目的
  • 鞋材加工东莞网站建设个人网站免费推广
  • 电商网站设计页面设计wordpress文章id连续
  • wordpress水墨主题企业网站怎么做seo优化
  • 设计网站猪八戒建设银行信用卡网站是哪个
  • ps网站页面设计教程wordpress标签显示
  • 2019建一个什么网站最好注册网站会员会泄露信息吗
  • 商河网站建设公司能进封禁网站的手机浏览器
  • 为什么要建设公司网站自己怎么建设手机网站首页
  • 新手建立网站的步骤天津的网络优化公司排名
  • 技术支持 湖州网站建设苏州网站建设服务
  • 上百度推广 免费做网站分析杭州高端网站建设开发的区别
  • wordpress 评论贴图佛山网站优化有
  • 网站建设计入什么会计科目iis做网站之vps
  • 网页制作与网站建设宝典(第2版)cms网站怎么做
  • 哪些公司需要网站开发thinkphp网站后台模板
  • 网站运营培训酷万网站建设
  • 做网站用哪个软件字体模板素材免费下载网站
  • 手机网站底部漂浮代码电商导购网站怎么做
  • 做网站特别注意什么opensearch wordpress
  • 做网站销售电话术语苏州网站建设方案外包
  • 下面哪些是用作电子商务网站开发建协的证书全国通用吗
  • 如何与别的网站做友情链接网站开发公司首页
  • 网站建设网站优化百色建设厅网站
  • 做百度网站需不需要备案吗移动网站开发教学大纲
  • 中国空间站扩建怎么做网站建设作业
  • 手机拍摄720全景软件重庆seo务
  • 进贤县住房和城乡建设局网站替朋友做网站