PHP Warning: file_get_contents failed to open stream解决办法

 更新时间:2016年11月25日 17:36  点击:2037
file_get_contents函数在获得远程文件时提示Warning: file_get_contents failed to open stream,希望例子能够帮助到各位,希望例子能够帮助到大家。

在做项目时用 file_get_contents 来获取数据,php 报错  PHP Warning: file_get_contents failed to open stream: no suitable wrapper could be found.

最后用了curl来获取数据!

今天百度了一下!找到了解决办法!先拷贝过来!

系统:centos 6.5

在错误日志中,php报的错误是

Warning: file_get_contents() [function.file-get-contents]: http:// wrapper is disabled in the server configuration by allow_url_fopen=0

failed to open stream: no suitable wrapper could be found

此警告说服务器阻止访问远程文件,修改php.ini

allow_url_fopen = Off
allow_url_include = Off

改成

allow_url_fopen = On
allow_url_include = On

重启php-fpm或者重启web服务。

如果还是无法解决 的话

windows下处理方法:

c:\windows\php.ini

extension=php_openssl.dll 把前的;去掉,重启iis服务。

linux下处理方法:

/etc/php.ini

extension=php_openssl.dll 把前的;去掉,重启apache服务。


如果上面问题没能解决我的问题,我们可以如下测试。


$context = stream_context_create(array('http'=>array('ignore_errors'=>true)));
$contents = file_get_contents($url, FALSE, $context);

可以请求时,忽略错误。可以解决警告信息

无法上传大文件是因为php.ini配置有限制了,这样限制了用户默认最大为2MB了,超过了就不能上传了,如果你确实要上传我们可以按下面方法来处理一下。


打开php.ini,

参数  设置  说明 

file_uploads  on  是否允许通过HTTP上传文件的开关。默认为ON即是开 
upload_tmp_dir  –  文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹 
upload_max_filesize  8m  望文生意,即允许上传文件大小的最大值。默认为2M 
post_max_size  8m  指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M 
说明 
一般地,设置好上述四个参数后,在网络正常的情况下,上传<=8M的文件是不成问题 
但如果要上传>8M的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100M/S的上传高速,否则你还得继续设置下面的参数。 

max_execution_time  600  每个PHP页面运行的最大时间值(秒),默认30秒 
max_input_time  600  每个PHP页面接收数据所需的最大时间,默认60秒 
memory_limit  8m  每个PHP页面所吃掉的最大内存,默认8M 

把上述参数修改后,在网络所允许的正常情况下,就可以上传大体积文件了

[编辑]论坛文件上传常见错误类型(不断总结中…)
Warning: Unable to open ‘\\php2′ for reading: Invalid argument in e:\user\web\larksoft.net\upload\upfile.php on line 10
是php的upload_tmp_dir的原因,所指定的目录必须可读可写

Parse error: parse error in c:\program files\apache group\apache\htdocs\mdweb\ftpfile\upload.php on line 14
Parse error一般都是语句的问题,比如象“;”,“’”,“)”等等的匹配问题

搞定了,是/etc/httpd/conf.d/php.conf里面,有一个
<Files *.php>
SetOutputFilter PHP
SetInputFilter PHP
LimitRequestBody 524288
</Files>

把LimitRequestBody 改了就可以了。


如果你是Nginx的话还需要修改nginx.conf中的http段:

1. 修改PHP配置文件中的三项:vim /usr/local/php/etc/php.ini
(1)post_max_size = 50M      #PHP可接受的最大POST数据
(2)upload_max_filesize = 50M   #文件上传允许的最大值
(3)max_execution_time = 300   #每个脚本的最大执行时间,秒钟(0则不限制,不建议设0)
2. 修改Nginx配置文件:vim /usr/local/nginx/conf/nginx.conf (如果忘了配置文件的具体位置,可以使用 locate nginx.conf 查找)
(1)client_max_body_size 50m   #客户端最大上传大小 50M
3. 重启PHP:/etc/init.d/php-fpm restart
4. 平滑重启Nginx:/usr/local/nginx/sbin/nginx -s reload

php5.3和5.4、5.5不能加载php_curl.dll问题不光在win7中就连在win2003与xp系统都会有碰到过了,对于这个问题我们来看解决办法。


最近分别在WIN7和Windows8 上分别安装php 高版本!都遇到了这个问题!

一.win7系统32位, apache2.2, php5.2升级到5.4.

这个比较容易:
1. phpinfo发现没有加载curl;
2. 在php.ini中设置extension_dir 指向e:\php5.4\ext; 部分php扩展加载了, 但curl仍不行。
3. 设置windows系统环境变量, phpext, 指向e:\php5.4\ext, PHPRC 指向e:\php5.4
设置path环境变量,添加e:\php5.4
4. 重新启动apache, 终于出来了, 大功告成!

一.win8系统64位, apache2.2,   php5.4 , v9版

首先前面win7下的都执行了, 但死活不行!也下载了许多64位的php_curl.dll, 也不行!

发现很可能是加载依赖的问题! 最后解决!

1. 执行前面win7下的1-4步!

2. 下载:http://www.dependencywalker.com/

3. 查看php版本中的php_curl.dll模块依赖!自行尝试吧, 运行并找到php_curl.dll路径, 打开查看依赖库。
4. 在http.conf中最后,添加:

LoadFile E:/PHP/php-5.4/php5ts.dll
LoadFile E:/PHP/php-5.4/libeay32.dll
LoadFile E:/PHP/php-5.4/ssleay32.dll
LoadFile E:/PHP/php-5.4/libssh2.dll


LoadModule php5_module "E:/PHP/php-5.4/php5apache2_2.dll"
AddType application/x-httpd-php .php
5. 重启, 大功靠成!
三总结:
主要问题, php要下载安全版本;各种方法都试了, 仍不行, 就查看依赖并尝试添加。
php包里的php_curl.dll扩展应是可用的, 不要随便替换。 另外, 尽管php文档注释32位环境才需加依赖, 事实不是这样。
花了我半天的时间!

使用openssl生成证书如果是纯数字的肯定是没有任何的问题了,但是碰到中文数字时会发现就出问题了,证书变成了乱码了,下文来看解决办法。


用openssl创建证书时, 编码用utf-8, 中文证书出现乱码。经多项测试未能解决。
在apache2.2中创建不成功。 后升级服务器,使用apache2.4+php5.5, 重新执行,成功。

$dn = array( 
        "countryName"         => 'Zh', //所在国家名称 
        "stateOrProvinceName" => '北京', //所在省份名称 
        "localityName"        => '北京', //所在城市名称 
        "organizationName"    =>  '北京理房通支付科技有限公司',   //注册人姓名 
        "organizationalUnitName" => '北京理房通支付科技有限公司', //组织名称 
        "commonName"          => '北京理房通支付科技有限公司', //公共名称 
 
    );
 
print_r( $dn);
        
 
$numberofdays = 365;     //有效时长
     
$cerpath = "./pem.cer";    //生成证书路径 
       
 $res = openssl_pkey_new();
 $csr     = openssl_csr_new($dn, $res);    //证书
 $sscert  = openssl_csr_sign($csr, null, $res, $numberofdays);   //签名
 
 openssl_x509_export($sscert, $csrkey); //导出证书$csrkey 
 
   //生成证书文件
 
    $fp = fopen($cerpath, "w"); 
    fwrite($fp, $csrkey); 
    fclose($fp); 

memcache是一套分布式的高速缓存系统,在Drupal中我们可以利用Memcach提高Drupal应用性能,本文是我们总结的Memcache的hash策略及配置。

Memcach是web应用/Drupal应用性能提高的利器,近期在使用Memcache中,发现有很多小问题,因此作者特意总结了几个,放上来供大家参考使用。

1. Memcache和Memcached的区别

这个是历史问题,但是,言而总之:名字长的更牛逼!  

所以,推荐使用memcached。
另外,memcached有很多新特性,包括getMulti/setMulti、支持存储object、支持count+1操作,都会比memcache的好用一些,可以试试,或许以后支持更多的操作,赶上redis。。

Drupal大学上关于memcache的问答:http://../apachesolr_search/memcache


如下(摘自德问):

#Memcache
$m = new Memcache();
$m->addServer('localhost', 11211);
$v = $m->get('counter');
$m->set('counter', $v + 1);
#由于get/set这两个动作无法作为一个原子来操作,所以当多个进程同时处理时,
#会出现丢失的可能,更让人恼火的是,你根本就不知道什么时候出现丢失。

#Memcached
$md = new Memcached();
$md->addServer('localhost', 11211);
$v = $md->get('counter', null, $token)
$md->cas($token, 'counter', $v + 1);
#cas是Memcached版本里提供的功能,说白了就是一个乐观锁的功能,
#如果你把$token的值var_dump出来,就会发现$token其实就是一个版本号,
#如果通过get得到的$token版本号在cas的时候不对应,就说明已经有别的操作更新了,
#此时cas操作会失败,至于如何继续操作,就看你自己了

两者的区别如下,下面是Memcache的方法:

memcache
下面是memcached的方法:
memcached

2. Memcache的哈希策略

    常规的hash策略是取模,比如key=10, 有两台服务,就10%2=0,算出该值分布在第一台服务器上。
    那么缺点也很明显,比如服务器增加一台,之前的分布式策略全完蛋。

因此,业界需要更牛逼的算法~

一致性hash算法隆重登场!

简单说来,一致性hash算法就是先把服务器也通过某一个特征(如IP/MAC地址)hash一下,这样服务器会按照分布(可能不均匀)在一个范围,然后把key再hash一下,然后看key最近的下个服务器作为该key的存储bin。
这样,如果增加一台服务器,重新分配的key只是分布再新增的这个服务器和上一个最近的服务器之间的key,其余的都不变。

初步的服务器分布:

hash-1

增加服务器的分布:
hash-2

上面的描述的是白话,可能比较拗口,笔者文字水平有限,详情见下面的链接:

http://blogread.cn/it/article/5271
http://blog.csdn.net/kongqz/article/details/6695417

3. Memcache的hash策略配置

Memcache安装完成之后,可以设置哈希策略,memcache.hash_strategy。目前有standard模式和consistent模式。standard模式其实就是%,即取模。而consistent,就是hash的一致性算法。

在Memcache中,hash策略在PHP.ini文件中设置

[Memcache]
Memcache.allow_failover = 1
……
……
Memcache.hash_strategy =consistent
Memcache.hash_function =crc32

在Memcached中,hash策略在PHP的参数中设置:

mem = new memcached();
$mem-&gt;setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
$mem-&gt;setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE,true);

 

4. 后记

因此正常情况下,推荐使用一致性哈希算法,但凡事无绝对,比如一个小的站点,memcache的服务几乎永不会增加,这是用常规的standard的算法也是比较推荐的,毕竟一致性算法存在一个均匀分布的问题(可能已经解决了。。)

[!--infotagslink--]

相关文章

  • PHP session_start()很慢问题分析与解决办法

    本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25
  • php中json_decode()和json_encode()用法与中文不显示解决办法

    本文章介绍了关于php中json_decode()和json_encode()用法与中文不显示解决办法,有需要的朋友可以参考一下下。 php中json_decode()和json_encode() 1.json_decode(...2016-11-25
  • phpexcel导出数据身份证后四位0000解决办法

    在php中我们如果要导入excel数据我们通常会使用phpexcel插件了,但是有朋友会发与使用phpexcel导出数据出现身份证后四位是0000情况了,下面我们就来看解决办法。 最...2016-11-25
  • 401错误码代表什么 401错误解决办法

    401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • apache网站提示503错误解决办法

    Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
  • php file_get_contents 设置代理抓取页面示例

    file_get_contents函数在php中可以直接打开本地文件也可以直接抓取远程服务器文件,如果简单的采集我们可以使用file_get_contents直接来操作,如果有防采集我们可能需要...2016-11-25
  • Perl CPAN::Modulelist的解决办法

    今天用CPAN安装Term::ReadLine,报了个这样的错误 Going to read /root/.cpan/sources/modules/03modlist.data.gz Can't locate object method "data" via package "C...2016-11-25
  • phpStudy访问速度慢和启动失败的解决办法

    下面给大家介绍phpstudy访问速度慢的解决办法。1、修改mysql数据库链接地址为ip地址127.0.0.1。2、使用最新版本,这个坑了我好久时间。下面一段内容是关于phpstudy启动失败的解决办法。php5.3、5.4和apache都是用vc9编...2015-11-24
  • PHP Curl出现403错误的解决办法

    自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31
  • php报错file_get_contents(): php_network_getaddresses问题

    本文章来为各位介绍一篇关于file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known...错误解决办法。 昨天,服务器的DN...2016-11-25
  • PHP判断上传文件类型的解决办法

    分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21
  • PHP file_get_contents设置超时处理方法

    file_get_contents的超时处理话说,从PHP5开始,file_get_content已经支持context了(手册上写着:5.0.0 Added the context support. ),也就是说,从5.0开始,file_get_contents其实也可以POST数据。今天说的这篇是讲超时的,确实在...2013-10-04
  • android.os.BinderProxy cannot be cast to com解决办法

    本文章来给大家介绍关于android.os.BinderProxy cannot be cast to com解决办法,希望此文章对各位有帮助呀。 Android在绑定服务的时候出现java.lang.ClassCastExc...2016-09-20
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
  • php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法

    最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21
  • PHP页面转UTF-8中文编码乱码的解决办法

    对于乱码这个问题php开发者几乎都会有碰到过,我们下面主要是介绍了php文件乱码和页面乱码。PHP页面转UTF-8编码问题 1.在代码开始出加入一行: header("Content-Type: text/html;charset=utf-8"); 2.PHP文件编码问题...2015-10-21
  • file_get_contents()获取https出现这个错误Unable to find the wrapper “https”

    下面我们来看一篇关于file_get_contents()获取https出现这个错误Unable to find the wrapper “https”问题的解决办法. file_get_contents()获取https出现这个错...2016-11-25
  • Android开发之PhoneGap打包及错误解决办法

    下面来给各位简单的介绍一下关于Android开发之PhoneGap打包及错误解决办法,希望碰到此类问题的同学可进入参考一下哦。 在我安装、配置好PhoneGap项目的所有依赖...2016-09-20
  • Ubuntu15下mysql5.6.25不支持中文的解决办法

    apt-get install 安装的,不是源码包安装的mysql1 修改mysql的配置文件/etc/mysql/conf.d/mysql.cnf在[mysql]的下方加入如下语句:(注:这个文件下没有配置,只有【mysql】)no-auto-rehash default-character-set=utf8/etc/...2015-10-21