centos libz?centos7.2
PHP Curl出现403错误怎么办
使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问googlebaidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果设置为不使用proxy则都能正常访问。
难道googlebaidu就不让用proxy连接么?显然不可能,所以打开curl的信息输出(curl_setopt($this->mSh,CURLOPT_VERBOSE,1);)看看,得到以下结果:
.代码如下:
*Trying127.0.0.1...*connected
*Connectedto127.0.0.1(127.0.0.1)port8118(#0)
*EstablishHTTPproxytunneltowww.baidu.com:80
>CONNECTwww.baidu.com:80HTTP/1.0
Host:www.baidu.com:80
User-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)
Proxy-Connection:Keep-Alive
<HTTP/1.0403Connectionnotallowable
<X-Hint:Ifyoureadthismessageinteractively,thenyouknowwhythishappens,-)
<
*TherequestedURLreturnederror:403
*ReceivedHTTPcode403fromproxyafterCONNECT
*Closingconnection#0
...Failed.
可以看到proxy服务器工作正常,的确是baidu返回了403错误,但原因肯定还在我这边。终于,从网上(1of2,2of2)得到了点启发──我使用的是proxytunnel而非proxy。
在代码中,有这么一句:
.代码如下:
curl_setopt($this->mSh,CURLOPT_HTTPPROXYTUNNEL,true);
curl_setopt($this->mSh,CURLOPT_PROXY,$phost);
php文档中没有详细说明,不过mancurl中有详细解释,两者都是代理,proxytunnel(-p参数)允许其他协议通过http代理传输,而proxy(-x参数)则只能走http协议。所以我猜测,googlebaidu的服务器和curl的proxytunnel不和,所以返回403。
禁用掉上面2行代码的第一句后,curl访问恢复正常。
比较奇怪的是,几种操作系统下还不一样,一台MACOSX就要显式的禁用proxytunnel才可以,curl版本:
.代码如下:
$curl--version
curl7.16.3(powerpc-apple-darwin9.0)libcurl/7.16.3OpenSSL/0.9.7lzlib/1.2.3
Protocols:tftpftptelnetdictldaphttpfilehttpsftps
Features:GSS-NegotiateIPv6LargefileNTLMSSLlibz
而另外一台ubuntu则完全不受影响,怎么都能用,curl版本:
.代码如下:
$curl--version
curl7.18.2(i486-pc-linux-gnu)libcurl/7.18.2OpenSSL/0.9.8gzlib/1.2.3.3libidn/1.10
Protocols:tftpftptelnetdictldapldapshttpfilehttpsftps
Features:GSS-NegotiateIDNIPv6LargefileNTLMSSLlibz
MT主机上的centos也没事,curl版本:
.代码如下:
$curl--version
curl7.15.5(i686-redhat-linux-gnu)libcurl/7.15.5OpenSSL/0.9.8bzlib/1.2.3libidn/0.6.5
Protocols:tftpftptelnetdictldaphttpfilehttpsftps
Features:GSS-NegotiateIDNIPv6LargefileNTLMSSLlibz
看来不完全是curl版本问题,MACOSX的确与众不同啊。
还有一个原因也会导致curl返回403错误,如果设置了:
.代码如下:
curl_setopt($ch,CURLOPT_NOBODY,true);
则需要紧跟着设置:
.代码如下:
curl_setopt($ch,CURLOPT_CUSTOMREQUEST,'GET');
不然会因为http服务器不允许HEAD命令而返回403错误。参考:TroublewithacURLrequestinPHP(forums.devshed.com/php-development-5/trouble-with-a-curl-request-in-php-445222.html)。MACOSX上curl之所以特殊,也不排除是这种原因
如何在ubuntu上装freesurfer
1.从网上下载软件压缩包
在终端中使用如下命令:
ftp surfer.nmr.mgh.harvard.edu
用户名:anonymous;密码:空,即直接回车
cd pub/dist/freesurfer/4.5.0
dir
get freesurfer-Linux-centos4-stable-pub-v4.5.0-full.tar.gz
大约需要18个小时能下载完。
2.把文件移到需要安装的目录下,并解压缩,如放到/usr/local
mv freesurfer-Linux-centos4-stable-pub-v4.5.0-full.tar.gz/usr/local
tar zxvf freesurfer-Linux-centos4-stable-pub-v4.5.0-full.tar.gz
3.安装tcsh
apt-get tcsh
4.配置环境变量
export FREESURFER_HOME=/usr/local/freesurfer
编辑~/.bashrc文件,在最后添加下面两个语句:
export FREESURFER_HOME=/usr/local/freesurfer
source$FREESURFER_HOME/SetUpFreeSurfer.sh
5.基本安装
在终端运行如下命令:
export FREESURFER_HOME=<freesurfer_installation_directory>/freesurfer
source$FREESURFER_HOME/SetUpFreeSurfer.sh
此时,终端上会打印如下信息:
Setting up environment for FreeSurfer/FS-FAST(and FSL)
FREESURFER_HOME/usr/local/freesurfer
FSFAST_HOME/usr/local/freesurfer/fsfast
FSF_OUTPUT_FORMAT nii
SUBJECTS_DIR/usr/local/freesurfer/subjects
MNI_DIR/usr/local/freesurfer/mni
6.将.license文件复制到$FREESURFER_HOME目录下
将进行注册的时候,收到的邮件中的#---------------CUT HERE---------------之间的三行复制到一个文件中,并命名为.license文件
将.license文件复制到安装目录下的freesurfer文件中
7.安装其他库文件
cd bin
ldd tksurfer.bin
此时,会在终端打印如下信息:
linux-gate.so.1=>(0xb7f5a000)
libtix8.1.8.4.so=> not found(Tix8.4 ln-s)
libtk8.4.so=> not found(TK8.4)
libtcl8.4.so=>/usr/lib/libtcl8.4.so(0xb7e95000)或者是 not found
libGLU.so.1=>/usr/lib/libGLU.so.1(0xb7e12000)
libXmu.so.6=>/usr/lib/libXmu.so.6(0xb7dfc000)
libGL.so.1=>/usr/lib/libGL.so.1(0xb7d58000)
libXext.so.6=>/usr/lib/libXext.so.6(0xb7d4a000)
libX11.so.6=>/usr/lib/libX11.so.6(0xb7c63000)
libz.so.1=>/usr/lib/libz.so.1(0xb7c4d000)
libcrypt.so.1=>/lib/tls/i686/cmov/libcrypt.so.1(0xb7c1b000)
libdl.so.2=>/lib/tls/i686/cmov/libdl.so.2(0xb7c17000)
libpthread.so.0=>/lib/tls/i686/cmov/libpthread.so.0(0xb7bff000)
libstdc++.so.6=>/usr/lib/libstdc++.so.6(0xb7b0c000)
libm.so.6=>/lib/tls/i686/cmov/libm.so.6(0xb7ae7000)
libgcc_s.so.1=>/lib/libgcc_s.so.1(0xb7adb000)
libc.so.6=>/lib/tls/i686/cmov/libc.so.6(0xb798c000)
libXt.so.6=>/usr/lib/libXt.so.6(0xb793b000)
libSM.so.6=>/usr/lib/libSM.so.6(0xb7933000)
libICE.so.6=>/usr/lib/libICE.so.6(0xb791b000)
libGLcore.so.1=>/usr/lib/libGLcore.so.1(0xb6e05000)
libnvidia-tls.so.1=>/usr/lib/tls/libnvidia-tls.so.1(0xb6e03000)
libXau.so.6=>/usr/lib/libXau.so.6(0xb6e00000)
libxcb-xlib.so.0=>/usr/lib/libxcb-xlib.so.0(0xb6dfe000)
libxcb.so.1=>/usr/lib/libxcb.so.1(0xb6de6000)
/lib/ld-linux.so.2(0xb7f5b000)
libXdmcp.so.6=>/usr/lib/libXdmcp.so.6(0xb6de0000)
这样就完成了基本的安装,但是由于是Ubuntu环境,所以在测试的时候运行qdec会提示如下错误信息:
qdec.bin: error while loading shared libraries: libtiff.so.3: cannot open shared object file: No such file or directory
8.解决上面出现的问题
寻找到libtiff.so.4所在路径,然后建立libtiff.o.3和libtiff.so.4之间的软连接即可。
find/-name libtiff.so.4-print
ln-s/usr/lib/libtiff.so.4/usr/lib/libtiff.so.3
9.测试软件是否安装成功
recon-all--help
会打印出一些关于软件的信息
tkmedit bert orig.mgz
tkmedit bert norm.mgz-segmentation aseg.mgz$FREESURFER_HOME/FreeSurferColorLUT.tx
tksurfer bert rh pial
qdec
逐个运行上面的命令都会打开相应软件的界面
recon-all-s bert-autorecon1
会运行大概半个小时,如果没有什么问题说明软件安装成功了。
如何在linux平台上编译安装zlib软件
这段时间在重新编译LNMP,发现Linux中很多软件对zlib依存都比较大,但是系统中安装的版本都比较低,如果用yum直接升级的话,安装nginx时候没法指定zlib的目录,所以要编译安装zlib。编译的话,如果能把系统中已经安装的版本替换掉,这样才是最好的.但是由于在编译过程中,很多工具都对zlib有依存,所以掌握顺序非常必要,下面是博主在毫无指导资料的情况下,尝试了差不多一天总结出来的经验:
1,下载,解压 zlib1.2.3到/usr/local/src/下
2,查看一下zlib安装文件,rpm-ql zlib,可以看到库文件在lib64下
3,配置zlib,参数为./configure–prefix=/usr/local/zlib/,也可以加上–libdir=/lib64/直接指定库文件安装位置,这里为了我便于管理,就把所有文件放在一个目录下
4,用make进行编译
5,卸载zlib,掌握这个顺序很有必要,如果卸载早了的话,上一步就会提示失败。卸载指令 rpm-e–nodeps zlib,卸载完成之后,发现/lib64/目录下,zlib的库文件,libz.so*没有了
6,用make install安装zlib,安装完成之后,可以看到/usr/local/zlib/目录下有个lib目录,里面存放的就是zlib的库文件
7,这时候用yum等工具,会提示确实libz.so*支持,所以必须把当前共享库文件注册到系统中,打开/etc/ld.so.conf,在下面加入一行/usr/local/zlib/lib/,然后保存退出
8,用ldconfig重新更新一下cache,这时候再用yum等工具,发现运行正常了,至此,zlib就更新成功。
另外注意一下,zlib现在的最高版本是1.2.8,但是如果在centos 5.*中安装大于1.2.3的版本,会出现一些错误,上一篇博客已有讲到,不再重复。