ubuntu下file_get_contents返回空字符串
ubuntu下file_get_contents返回空字符串
- |
- 浏览:302
- |
- 更新:2014-03-30 10:11
本文起初面临的问题是PHP中SoapClient不好使,最后file_get_contents返回空字符串,通过解决这个问题,来解决SoapClient不好使的问题
工具/原料
- php安装扩展Soap
方法/步骤
- 1
最近PHP代码中在执行到
$soapclient = new SoapClient('http://sdk.entinfo.cn:8060/webservice.asmx?WSDL');
这条语句会抛出异常:
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR:
Parsing WSDL: Couldn't load from
'http://sdk.entinfo.cn:8060/webservice.asmx?WSDL' : Start tag expected,
'<' not found
in /ROOT/www/test.php:2
Stack trace - 2
首先查看PHP是否安装了Soap扩展。查看phpinfo,可知安装了Soap扩展
- 3
根据异常的情况 判断,意思大概是连文档的Start tag没有读到,
1) 在浏览器中直接访问,发现是可以的,
2) curl也是可以的
- 4
1)于是用 file_get_contents(),获取内容,发现返回的是个空字符串。
2) 于是检查 php.ini 中的 allow_url_open, 发现也是开这的
3)遂进行如下测试:
$file = fopen('http://www.example.com/', 'rb');
var_dump(stream_get_meta_data($file)); - 5
/*
输出结果:
array(10) {["wrapper_data"]=>
array(2) {["headers"]=>
array(0) {
}["readbuf"]=>
resource(38) of type (stream)}
["wrapper_type"]=>
string(4) "cURL"["stream_type"]=>
string(4) "cURL"["mode"]=>
string(2) "rb"["unread_bytes"]=>
int(0)["seekable"]=>
bool(false)["uri"]=>
string(23) "http://www.example.com/"["timed_out"]=>
bool(false)["blocked"]=>
bool(true)["eof"]=>
bool(false)}
*/
- 6
输出的结果中,
wrapper_type为cURL,而且wrapper_data为空,这是不正常的,
正常情况下wrapper_type应为
http,wrapper_data数组中应该包含响应头信息。发现这个现象与--with-curlwrappers这个编译选项有
关,遂查看PHP编译参数:$ php -i | grep configure
- 7
Configure Command => './configure' '--prefix=/usr/local/php'
'--with-config-file-path=/usr/local/php/etc'
'--with-mysql=/usr/local/mysql'
'--with-mysqli=/usr/local/mysql/bin/mysql_config'
'--with-iconv-dir=/usr/local' '--with-zlib' '--with-libxml-dir=/usr'
'--enable-xml' '--enable-bcmath' '--enable-shmop' '--enable-sysvsem'
'--enable-inline-optimization' '--with-curl' '--with-curlwrappers'
'--enable-mbregex' '--enable-fpm' '--enable-mbstring' '--with-mcrypt'
'--with-openssl' '--with-mhash' '--enable-pcntl' '--enable-sockets'
'--with-xmlrpc' '--enable-zip' '--enable-soap' '--enable-bcmath' - 8
--with-curlwrappers被启用了,问题应该出在这里,查看一下这个编译选项的用处:
$ ./configure --help | grep curlwrappers
--with-curlwrappers EXPERIMENTAL: Use cURL for url streams
看来--with-curlwrappers这个编译选项是用来处理url stream的,不过前面有个硕大的EXPERIMENTAL字样,还在试验中。 现有的解决方法是重新编译PHP,去掉「--with-curlwrappers」:
- 9
1) $ cd /path/to/php-5.3.6 (切换到php安装目录)
2) $ make clean (一定要make clean)
3) $ ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-zlib \
--with-libxml-dir=/usr --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem \
--enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt \
--with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip \
--enable-soap --enable-bcmath -with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf4) $ make && make install
5) $ cd /usr/local/php/bin
# 删除旧的PHP binary文件,并用新的进行替换,Mac下重新编译后会产生php.dSYM文件,其他Linux系统请自行处理
$ rm php && mv php.dSYM php6) 重启 php
- 10
完成后,再做个测试:
$file = fopen('http://www.example.com/', 'rb');
var_dump(stream_get_meta_data($file));/*
结果如下:array(10) {
["wrapper_data"]=>
array(12) {[0]=>
string(18) "HTTP/1.0 302 Found"[1]=>
string(46) "Location: http://www.iana.org/domains/example/"[2]=>
string(13) "Server: BigIP"[3]=>
string(17) "Connection: close"[4]=>
string(17) "Content-Length: 0"[5]=>
string(15) "HTTP/1.1 200 OK"[6]=>
string(35) "Date: Sun, 18 Mar 2012 06:12:27 GMT"[7]=>
string(29) "Server: Apache/2.2.3 (CentOS)"[8]=>
string(44) "Last-Modified: Wed, 09 Feb 2011 17:13:15 GMT"[9]=>
string(21) "Vary: Accept-Encoding"[10]=>
string(17) "Connection: close"[11]=>
string(38) "Content-Type: text/html; charset=UTF-8"}
["wrapper_type"]=>
string(4) "http"["stream_type"]=>
string(14) "tcp_socket/ssl"["mode"]=>
string(2) "rb"["unread_bytes"]=>
int(1225)["seekable"]=>
bool(false)["uri"]=>
string(23) "http://www.example.com/"["timed_out"]=>
bool(false)["blocked"]=>
bool(true)["eof"]=>
bool(false)
}
*/ - 11
wrapper_type变成了http,wrapper_data也被填充了,一切恢复正常。
所以一条结论:慎用--with-curlwrappers
ubuntu下file_get_contents返回空字符串的更多相关文章
- vue 之 后端返回空字符串用 null 和 “”以及 undefind 判断不到的问题
原文: <!-- <span v-if="scope.row.buyer_credit_score != '' || scope.row.buyer_credit_score ! ...
- 面试题:编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。(c++实现)
实例说明 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ...
- 唯一区别是不会去取emptyText 的值,没有选选择选项的时候返回是空字符串
combox取值以及赋值的方法 function getValue() { //注意:以下这两种取值方法都会存在一个问题: 当combox设置成能输入并有只能提示的时候,当输入的不是备选项时,或到的v ...
- ASP.NET Core WebApi 返回统一格式参数(Json 中 Null 替换为空字符串)
相关博文:ASP.NET Core WebApi 返回统一格式参数 业务场景: 统一返回格式参数中,如果包含 Null 值,调用方会不太好处理,需要替换为空字符串,示例: { "respon ...
- ubuntu下执行ulimit返回“不允许的操作”,问题解决思路
在ubuntu下执行ulimit,希望修改允许的最大打开文件数,但返回“不允许的操作”. 使用ulimit -a查看当前配置 core file size (blocks, -c) 0 data se ...
- ubuntu下仅仅获取网卡一的ip地址 && shell中字符串拼接
问题描述: ubuntu下仅仅获取网卡一的ip地址 问题背景: eth0,eth1,eth2……代表网卡一,网卡二,网卡三…… lo代表127.0.0.1,即localhost | 问题描述: 已知字 ...
- 如果不空null并且不是空字符串才去修改这个值,但这样写只能针对字符串(String)类型,如果是Integer类型的话就会有问题了。 int i = 0; i!=''。 mybatis中会返回tr
mybatis 参数为Integer型数据并赋值0时,有这样一个问题: mybatis.xml中有if判断条件判断参数不为空时,赋值为0的Integer参数被mybatis判断为空,因此不执行< ...
- mysql 查询结果为null 或 空字符串时,返回指定字符串
直接上代码, 亲测可用: SELECT IF ( ifnull( 字段, '' ) = '', '返回的字符串', 字段) AS 别名(或者不要也可以) FROM table
- springboot中返回值json中null转换空字符串
在实际项目中,我们难免会遇到一些无值.当我们转JSON时,不希望这些null出现,比如我们期望所有的null在转JSON时都变成“”“”这种空字符串,那怎么做呢? Jackson中对null的处理 @ ...
随机推荐
- Python开发【第九篇】:协程、异步IO
协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是协程,协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切换回 ...
- sql yog出现2013错误
首先用telnet检查一下你的防火墙端口,如果连接失败,配置防火墙. 配置防火墙,开启3306端口 find -name iptables vim /etc/sysconfig/iptables -A ...
- vue2 -- axios
4. 通过axios实现数据请求 vue.js默认没有提供ajax功能的. 所以使用vue的时候,一般都会使用axios的插件来实现ajax与后端服务器的数据交互. 注意,axios本质上就是java ...
- mac pfctl / centos iptables 使用
mac使用pfctl 为了测试zk client的重连功能,需要模拟zk client与zk server网络连接出现问题的情况,经过查询资料发现可以使用防火墙阻止zk server启动端口上的流量实 ...
- Chart Parser 中 Earley's 算法的应用
1. 基本概念 1.1 状态 state 上下文无关文法规则 圆点 · (左边是已分析的,右边是未分析的:点在最右端表示完成状态,否则为未完成状态) 状态的起止位置 1.2 基本操作/算子 opera ...
- Top值
业务开发中经常会用到元素或者浏览器窗口的各种top值,最近开发组件的过程中也遇到各种问题,因此决定好好总结一下. 常见的top值 scrollTop Element.scrollTop 属性可以获取或 ...
- net_device 内核中是如何组织的
下边函数实现将新的 net_device 设备插入到内核链表中工作 /* * Device list insertion */ static void list_netdevice(struct ne ...
- HTTP之请求消息Request
客户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request line).请求头部(header).空行和请求数据四个部分组成. 请求行以一个方法符号开头,以空格分开,后面跟着请 ...
- 支付宝app对接的坑
主要流程是: 1.申请成为开发者 2.创建应用 3.设置应用公钥/私钥/支付宝公钥 4.制作服务器端代码(此处注意,不要解析htmlencode) https://blog.csdn.net/zzzi ...
- 2-1 如何抓不同的接口(手机抓包,web网页抓包)
举个例子,一个测试和安卓的对话. 测试:Android你这里有个bug Android:这是服务端的bug 测试:是你这里显示的不对 Android:你去看服务端返回数据,他不对,你会不会测试. 从这 ...