libcurl升级后找不到libcurl.so.3解决之法

 更新时间:2016年11月25日 17:38  点击:2135
本文章今天来给大家介绍一个libcurl升级后找不到libcurl.so.3解决之法,希望对各位朋友有帮助呀。

系统装的是libcurl 7.19的版本,编译的动态库是libcurl.so.4

自己的程序编译是在libcurl 7.15的版本下编译的,用的是libcurl.so.3的版本,要做下软链接即可:
根据自己使用的是32位系统或者64位系统 做如下处理:

 代码如下 复制代码

cd /usr/lib 或者 cd /usr/lib64
ln -s libcurl.so.4 libcurl.so.3


libcurl主要功能就是用不同的协议连接和沟通不同的服务器~也就是相当封装了的sockPHP 支持libcurl(允许你用不同的协议连接和沟通不同的服务器)。, libcurl当前支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传(当然你也可以使用PHP的ftp扩展), HTTP基本表单上传,代理,cookies,和用户认证。
 

给出我的一个简单的代码例子:
说明:
1.关键在curl_easy_setopt函数设置option,可以设置ftp,http,get,post等许多选项,请根据具体使用情况设置。

2.对取回来的数据需要进行判断,比如http下载文件,如果文件不存在,需要进行处理。因为writer是可以将buf填充404 not found等网页内容的,不能将这个内容当成文件内容,所以需要判断http web返回来的code,进行判断。

3.我有个问题,就是想得到服务器上filename的具体名称,verbose调试已经返回了,但是我在getinfo的时候,试过好多选项,但未找到这个存放真实服务器文件名的选项,如果有知道的麻烦告诉我,谢谢了!

 代码如下 复制代码


#include "curl/curl.h"
#pragma comment(lib, "libcurl.lib")

long writer(void *data, int size, int nmemb, string &content);
bool  CurlInit(CURL *&curl, const char* url,string &content);
bool  GetURLDataBycurl(const char* URL, string &content);

void main()
{
    char *url ="http://www.111cn.net";
    string content;
    if ( GetURLDataBycurl(url,content))
    {
        printf("%sn",content);

    }
    getchar();
}

bool CurlInit(CURL *&curl, const char* url,string &content)
{
    CURLcode code;
    string error;
    curl = curl_easy_init();
    if (curl == NULL)
    {
        printf( "Failed to create CURL connectionn");
        return false;
    }
    code = curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error);
    if (code != CURLE_OK)
    {
        printf( "Failed to set error buffer [%d]n", code );
        return false;
    }
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
    code = curl_easy_setopt(curl, CURLOPT_URL, url);
    if (code != CURLE_OK)
    {
        printf("Failed to set URL [%s]n", error);
        return false;
    }
    code = curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
    if (code != CURLE_OK)
    {
        printf( "Failed to set redirect option [%s]n", error );
        return false;
    }
    code = curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
    if (code != CURLE_OK)
    {
        printf( "Failed to set writer [%s]n", error);
        return false;
    }
    code = curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
    if (code != CURLE_OK)
    {
        printf( "Failed to set write data [%s]n", error );
        return false;
    }
    return true;
}

long writer(void *data, int size, int nmemb, string &content)
{
    long sizes = size * nmemb;
    string temp(data,sizes);
    content += temp;
    return sizes;
}

bool GetURLDataBycurl(const char* URL,  string &content)
{
    CURL *curl = NULL;
    CURLcode code;
    string error;

    code = curl_global_init(CURL_GLOBAL_DEFAULT);
    if (code != CURLE_OK)
    {
        printf( "Failed to global init default [%d]n", code );
        return false;
    }
   
    if ( !CurlInit(curl,URL,content) )
    {
        printf( "Failed to global init default [%d]n" );
        return PM_FALSE;
    }
    code = curl_easy_perform(curl);
    if (code != CURLE_OK)
    {
        printf( "Failed to get '%s' [%s]n", URL, error);
        return false;
    }
    long retcode = 0;
    code = curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE , &retcode);
    if ( (code == CURLE_OK) && retcode == 200 )
    {
        double length = 0;
        code = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD , &length);
        printf("%d",retcode);
        FILE * file = fopen("1.gif","wb");
        fseek(file,0,SEEK_SET);
        fwrite(content.c_str(),1,length,file);
        fclose(file);

        //struct curl_slist *list;
        //code = curl_easy_getinfo(curl,CURLINFO_COOKIELIST,&list);
        //curl_slist_free_all (list);

        return true;
    }
    else
    {
    //    debug1( "%s n ",getStatusCode(retcode));
        return false;
    }
    curl_easy_cleanup(curl);
    return false;
}

可能有很多朋友在本地使用phpmyadmin时过了下会发现又需要重新登录了,这个很不方便下面我来介绍修改phpMyAdmin默认登录超时方法。

phpMyAdmin的默认超时时间是1800秒,太短了开发过程中写几行代码回来一看数据库就超时了,反复登录很烦人。

修改方法:

打开phpMyAdmin/libraries/config.default.php 
 

 代码如下 复制代码
找到$cfg['LoginCookieValidity'] = 1440;

行把1440调大一些就ok了

我们一看Failed to write session data提示就知道是session不能写了,解决办法就是在php.ini中设置一个save_path 路径即可了。

错误提示

提示信息:Warning: Failed to write session data (files).
Please verify that the current setting of
session.save_path is correct () in Unknown on line 0


解决办法

 代码如下 复制代码

session.save_path = "D:/phprun/tmp"


这个为自定义文件夹 指向错误导致,系统默认不会出现,提示有时还有可能是目录没有写的权限哦,所以大家给权限就可以了。


由于PHP的工作机制,它并没有一个daemon线程来定期的扫描Session信息并判断其是否失效,当一个有效的请求发生时,PHP 会根据全局变量 session.gc_probability和session.gc_divisor的值,来决定是否启用一个GC, 在默认情况下,session.gc_probability=1, session.gc_divisor =100也就是说有1%的可能性启动GC(也就是说100个请求中只有一个gc会伴随100个中的某个请求而启动).

PHP垃圾回收机制的工作就是扫描所有的Session信息,用当前时间减去session最后修改的时间,同session.gc_maxlifetime参数进行比较,如果生存时间超过gc_maxlifetime(默认24分钟),就将该session删除。
但是,如果你Web服务器有多个站点,多个站点时,GC处理session可能会出现意想不到的结果,原因就是:GC在工作时,并不会区分不同站点的session.

PHP页面中文乱码出现的原因有几种,一种是页面编码不统计一,二是数据库未设置编码,三是apache编码有问题,下面我来给大家介绍两种解决办法,总体来讲就是页面编码不统一了。

出现乱码大部分是由于编码方式的不一致导致的,其中主要有四个地方不一致就可能存在这个可能:

1、页面文件的编码方式(.html,.php等)

2、html.head中指定浏览器的编码方式

3、MySql数据库传输的编码方式

4、Apache字符集


在只有PHP代码的页面,做JS弹窗的时候,如果弹窗内容含有中文,可能会出现乱码的问题,

解决办法,一行代码:

页面中文乱码

 代码如下 复制代码

header(“Content-Type: text/html; charset=utf-8");

数据库是文乱码

 代码如下 复制代码


1.<?php 
2.mysql_query('SET NAMES UTF8'); 
3.
//接下来的就是查出数据或者修改,增加咯  
4.?> 


注意:

1、此代码必须放在文件最上面, ‘<?php’之后;
2、charset值要看整个网站编码,如果是gb2312,则填gb2312。

今天买了一个空间发现空间不支持fsockopen函数,后来网上找了几种解决空间不支持fsockopen方法,下面给大家分享一下,希望对各位朋友有所帮助呀。

为了服务器安全考虑很多主机商禁用了php的fsockopen函数,昨天进博客,使用cos-html-cache生成静态文件,尼玛提示:

Warning: fsockopen() has been disabled for security reasons in D:...cos-html-cachecos-html-cache.php on line 35

换了其他版本的cos-html-cache,还是不行。后来找到下面的方法。 = =、(结果不行,因为函数都被禁用了。)

大家试下,很少有我这样的情况的,用其他替代函数。

一、如何禁用fsockopen()

下面是两种常用的禁用fsockopen的方法。

1、修改php.ini,将  disable_functions =   后加入  fsockopen  
2、修改php.ini,将  allow_url_fopen = On   改为  allow_url_fopen = Off  

二、如何解决fsockopen函数被禁用

1、如果服务器没有同时禁用pfsockopen,那么直接将fsockopen函数替换为pfsockopen。
具体操作:搜索程序中的字符串  fsockopen(   替换为  pfsockopen(   。示例如下
修改前:

 代码如下 复制代码

$fp = fsockopen($host, 80, $errno, $errstr, 30);

修改后:
 

$fp = pfsockopen($host, 80, $errno, $errstr, 30);


2、如果服务器同时禁用了pfsockopen,那么用其他函数代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的参数不同。
具体操作:搜索程序中的字符串  fsockopen(   替换为  stream_socket_client(   ,然后,将原fsockopen函数中的端口参数“80”删掉,并加到$host。示例如下
修改前:
 

 代码如下 复制代码

$fp = fsockopen($host, 80, $errno, $errstr, 30);

修改后
 

$fp = stream_socket_client($host."80", $errno, $errstr, 30);


3、如果PHP版本低于5.0,fsockopen被禁用,又没有stream_socket_client()怎么办呢?自己写一个函数实现fsockopen的功能,参考代码:

 代码如下 复制代码
 
function b_fsockopen($host, $port, &$errno, &$errstr, $timeout) {
 $ip = gethostbyname($host);
 $s = socket_create(AF_INET, SOCK_STREAM, 0);
 if (socket_set_nonblock($s)) {
  $r = @socket_connect($s, $ip, $port);
  if ($r || socket_last_error() == EINPROGRESS) {
   $errno = EINPROGRESS;
   return $s;
  }
 }
 $errno = socket_last_error($s);
 $errstr = socket_strerror($errno);
 socket_close($s);
 return false;
}

具体操作:

1.首先找到使用fsockopen函数的代码段,将上面代码加至其上端,搜索该代码段中的字符串  fsockopen(   替换为  b_fsockopen(  

2.因为fsockopen函数返回文件指针所以可以被文件函数操作,但是这个b_fsockopen函数没能返回文件指针,需要继续修改代码段:用socket_read(   替换掉  fread(   ,用socket_write(   替换掉fwrite(   ,用socket_close(   替换掉fclose(   。


解决方案二:

fsockopen大多数应用是的获取远程页面数据,对于获取远程页面这种应用,PHP还有其他函数可以完美替代:
 
方法1:

 代码如下 复制代码
<?php
$str = file("http://www.111cn.net");
$count = count($str);
for ($i=0;$i<$count;$i++){
     $file .= $str[$i];
     }
echo $file;
?>

 
 
方法2:

 代码如下 复制代码
<?php
$str = file_get_contents("http://www.111cn.net");
echo $str;
?>
[!--infotagslink--]

相关文章

  • 409错误是什么 http 409错误怎么解决

    409错误是什么?http 409错误怎么解决呢?不少站长在遇到这个错误代码之后都一筹莫展,本次一聚教程网为大家带来了详细的说明,快来看看吧。 409错误是什么: HTTP 40...2017-01-22
  • http 405错误是什么 http 405错误怎么解决

    http 405错误是什么?http 405错误怎么解决?相信很多站长都在找这两个问题的答案,本次小编为大家带来了详细的教程,快来看看吧。 405错误是什么: HTTP 405错误是H...2017-01-22
  • 403错误是什么 403错误怎么解决

    403错误是HTTP状态码的一种,属于“请示错误”,表示服务器拒绝请求。如果在搜索引擎尝试抓取您网站上的有效网页时显示此状态代码,那么,这可能是您的服务器或主机拒绝搜索...2017-01-22
  • 412错误是什么 412错误怎么解决

    412错误是什么?412错误怎么解决?本次一聚教程网将为大家带来详细的介绍,帮助大家全面了解412错误的意思以及解决412错误的方法。 412错误是什么: HTTP 412错误,(Precond...2017-01-22
  • 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
  • 407错误是什么 407错误怎么解决

    407错误是什么?407错误怎么解决?不少站长都遇到过407错误,下面小编将告诉大家如何处理407错误。 407错误是什么: HTTP 407错误是HTTP协议状态码的一种,表示需要代...2017-01-22
  • 406错误是什么 406错误怎么解决

    HTTP 406错误是HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。一般是指客户端浏览器不接受所请求页面的 MIME 类型。 而MIME类型是在把输出...2017-01-22
  • 410错误是什么 http 410错误怎么解决

    410错误是HTTP协议状态码的一种,本次一聚教程网将为大家详细介绍HTTP 410错误是什么,以及410错误的解决办法。 410错误是什么: HTTP 410错误是HTTP协议状态码的...2017-01-22
  • HTTP 400错误是什么 HTTP 400错误怎么解决

    每当遇到http错误代码为400,代表客户端发起的请求不符合服务器对请求的某些限制,或者请求本身存在一定的错误,那么HTTP 400错误怎么解决呢?请看下文介绍。 目前400错...2017-01-22
  • Jrebel启动失败解决方案详解

    这篇文章主要介绍了Jrebel启动失败解决方案详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-07
  • 升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...2021-07-14
  • 小记一次mysql主从配置解决方案

      今天研究了个开源项目,数据库是mysql的,其中的脚本数据需要备份,由于本人的机器时mac pro,而且mac下的数据库连接工具都不怎么好用,就想着如何利用windows下的数据库连接工具使用,并做相关备份,另外windows系统下的sqlyo...2015-10-21
  • anaconda升级sklearn版本的实现方法

    这篇文章主要介绍了anaconda升级sklearn版本的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-22
  • php 502 bad gateway的解决方案

    502 bad gateway是php-fpm的问题对于这个问题就是配置参数的问题了,下面我们整理了一些关于php-fpm错误问题的解决办法,具体如下。 今天升级完PHP出现了502 Bad Gat...2016-11-25
  • Android Gradle Plug 4.1.0 升级后gradle获取manifest位置失败问题解决

    这篇文章主要介绍了Android Gradle Plug 4.1.0 升级后gradle获取manifest位置失败问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-18
  • PHP如何使用cURL实现Get和Post请求

    这篇文章主要介绍了PHP如何使用cURL实现Get和Post请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-11
  • AndroidStudio升级4.1后启动失败Plugin问题解决

    这篇文章主要介绍了AndroidStudio升级4.1后启动失败Plugin问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-18
  • Delphi 实现软件自动升级的功能

    这篇文章主要介绍了Delphi 实现软件自动升级的功能的相关资料,希望通过本文能帮助到大家实现这样的功能,需要的朋友可以参考下...2020-06-30
  • linux系统下pip升级报错的解决方法

    这篇文章主要给大家介绍了关于linux系统下pip升级报错的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-31
  • PHP CURL CURLOPT参数说明(curl_setopt)

    CURLOPT_RETURNTRANSFER 选项:curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);如果成功只将结果返回,不自动输出任何内容。如果失败返回FALSEcurl_setopt($ch, CURLOPT_RETURNTRANSFER,0); 或着不使用这个选项:如果成功只...2013-10-04