关于php打开文件的写法原因之辨误

这是对一种错误表述的评论,错误见文后部分

"windows系统是直接输入文件的绝对路径需要这种方式"e:\\aaa.txt",注意是两个反斜杠,一个反斜杠的话就错了"这个说法是误导,或有 误导之嫌。windows系统表示文件路径时,使用一个反斜杠,而反斜杠在很多语言里表示转义之用,所以要用两个反斜杠;路径的字符串在程序运行过程中 (内存里),实际还是一个。

如果在php里,这样的用单引号括起路径字符串,如下这样是这完全正确的 readfile('e:\Downloads\t.txt'); 而readfile("e:\Downloads\t.txt");这样写就错了。不过事实上,在win32版的php里,这样写也是对的 readfile("e:\Downloads\z.txt"); 可能是反斜杠后是一个非转义字符,php把此\解析为常规反斜杠。

php里,用单引号括起路径字符串,readfile('e:\Downloads\t.txt');是这完全正确的,而readfile("e: \Downloads\t.txt");这样写就错了。不过事实上,在win32版的php里,这样写也是对的 readfile("e:\Downloads\z.txt"); 可能是反斜杠后是一个非转义字符,php把此\解析为常规反斜杠(但反对这样使用)。

——以上是对新浪微博里的一条微博做的回复,该条微博如下:http://weibo.com/1767100271/xDUCLyFYM【fopen函数的使用的几种方式】 //第一种使用fopen的方式,windows系统是直接输入文件的绝对路径需要这种方式"e:\\aaa.txt",注意是两个反斜杠,一个反斜杠的话就错了 //

原发微者没有回应,那就这管他了,把该条回复转到这里。

解决ssh连接linux服务器速度慢

核心:

服务器端sshd配置文件 /etc/ssh/sshd_config 看是否有如下的两条配置条目

GSSAPIAuthentication no
UseDNS no

如果前面带#,请把#删掉,或者新添加入这样两行。
然后重启sshd服务,或者重启服务器也可以。

注意是文件 /etc/ssh/sshd_config 而不是/etc/ssh/ssh_config

 

ssh 登录远程服务器,速度非常慢,通过网上查询,发现有一个参数 -v 可以输出显示连接的具体消息。于是连接加上这个参数连接

[feng@fsc ~]$ ssh -v foo.path8.net
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to v.path8.net [64.120.xxx.xxx] port 22.
debug1: Connection established.
debug1: identity file /home/feng/.ssh/identity type -1
debug1: identity file /home/feng/.ssh/id_rsa type 1
debug1: identity file /home/feng/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'v.path8.net' is known and matches the RSA host key.
debug1: Found key in /home/feng/.ssh/known_hosts:4
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
/*--------- 这里停留的十多秒钟时间 ----------*/
reverse mapping checking getaddrinfo for srv3.mktmaster.net [64.120.xxx.xxx] failed - POSSIBLE BREAK-IN ATTEMPT!
debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_501' not found

debug1: Unspecified GSS failure.  Minor code may provide more information
Credentials cache file '/tmp/krb5cc_501' not found

debug1: Unspecified GSS failure.  Minor code may provide more information


debug1: Next authentication method: publickey
debug1: Offering public key: /home/feng/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env XMODIFIERS = @im=ibus
debug1: Sending env LANG = zh_CN.utf8
Last login: Mon Oct 24 10:26:30 2011 from 124.79.xxx.xxx
[feng@v ~]$

大概就是GSSAPIAuthentication这个参数的问题了,之前就是因为连接速度慢,网上查,说是/etc/ssh/sshd_config 里加入参数 UseDNS no,再加个GSSAPIAuthentication yes, 结果速度还是慢。
于是去把这行改为GSSAPIAuthentication no,重启服务器端的ssdh服务,再次连接,速度快多了。

参考

悲剧,狗爹虚拟主机的ssh禁用转发了

悲剧了

悲剧,狗爹虚拟主机的ssh -d禁用转发了,快十一了,网络质量非常不好,博客后台半天都没有打开完成,就在标题里写内容了。

文章发布出去,页面终于可以打开完成了,补几句。

突然发现ssh不能翻墙了,查看进程是正常的,杀死自动重新运行,修改配置重启手动运行,照样没用,网查看错误消息

channel 1: open failed: administratively prohibited: open failed
channel 2: open failed: administratively prohibited: open failed

有中文资料,有几个原因,其中一个是最不愿意看到的原因,服务器端禁止转发了,然而经过加-v参数,看详细消息,越来越像这个原因,ssh登录到服务器上查看sshd相关的几个参数,

-bash-3.2$ less /etc/sysctl.conf |grep ip_for
net.ipv4.ip_forward = 0

果然操作系统级禁用转发

-bash-3.2$ cat /etc/ssh/sshd_config

文件最后一行

AllowTcpForwarding no
看来似乎是管理员刚加的这个参数。不过uptime显示系统启动17天了,难道这个设置还是修改后不重启就生效的?sshd的可以修改后重启服务立刻生效,但sysctl.conf级的呢?或许是管理员只是修改了这个设置,并没有重启机器。

最不愿意看到原因。

看来要买个vps,或者买个专门用于ssh转发的账号

debian 6 apt-get 包依赖关系错乱修复

使用apt-get install 一个包,好像是build-essential,但不幸的是安装时出错了,错乱的依赖关系,一个包一定要安装perl库老版本,另一个包又一定要新版本,于是冲突了,试了N多方法,都不行,-f install,remove ,clean;更换apt-get源,仓库;重命名/var/lib/dpkg/目录,其中status文件(目的是希望系统自己重建依赖关系表,但失败了)

最后在这里http://qref.sourceforge.net/Debian/quick-reference/ch-package.zh-cn.html看到

3.3.4 恢复软件包选择状态的数据

如果 /var/lib/dpkg/status 因为某种原因坏掉了,Debian 系统将会完全丢失软件包选择状态的数据。赶快到 /var/lib/dpkg/status-old 或 /var/backups/dpkg.status.* 下找找旧的 /var/lib/dpkg/status 文件。

将 /var/backups/ 放在其它的分区是个好习惯,因为该目录包含了许多非常重要的系统数据。

如果旧的 /var/lib/dpkg/status 文件也坏了,仍可以从 /usr/share/doc/ 下的目录进行恢复这些信息。

# ls /usr/share/doc | \
grep -v [A-Z] | \
grep -v '^texmf$' | \
grep -v '^debian$' | \
awk '{print $1 " install"}' | \
dpkg --set-selections
# dselect --expert

第一条命令执行过,重新apt-get update再apt-get upgrade,就没错误了,不过好像还有问题,apt-get install smplayer 还是有错误

E: Could not perform immediate configuration on 'libc6'. Please see man 5 apt.conf under APT::Immediate-Configure for details. (2)

本文是一篇很久以前一次失败尝试的记录文章。在草稿箱里放了5年多,最近整理博客看其更新时间为 2011年9月10日 @ 01:08,这么久都没有继续写,大概以后也不会续写了,直接发出来算了(2016-10-10 18:10)

【补记】,后来问题还是没有解决,重装了,再后来就基本没有怎么搞debian,连ubuntu也只装过几次,甚至没真正用,然而没怎么用,还经常莫名其妙的话图形桌面搞挂,恢复不过来,感觉很受伤,隐隐的对debian/ubuntu有那么一丝成见

thinkpad t420s在centos/linux上启用指点杆中键竖直水平滚动功能

在thinkpad t420s上使用centos 6, centos 6 在驱动支持方面已经比较完善,基本不需要另外安装驱动即可。不过指点杆小红帽没有中键功能没有打开,这点还是不方便的(虽然触摸板双指滚动是可以通过gui设置界面启用的)。

从thinkwiki里看到开启方式http://www.thinkwiki.org/wiki/How_to_configure_the_TrackPoint

按其中 Configuration using xinput一节,使用root账号执行命令

xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation" 8 1
xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Button" 8 2
xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Timeout" 8 200

其中第三条命令执行有错误,但没有影响正常使用。再执行以下命令

xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Axes" 8 6 7 4 5
xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Middle Button Emulation" 8 1
xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Middle Button Timeout" 8 50

执行完毕,不需要重启,连X都不用重启就可以使用中键滚动功能了。

至于原因,并不很清楚,这些都是linux 的外围功能,个人感觉没必要深入研究。

上该方法应该可以用在fedora,redhat等发行版上,不过没有测试。

还有一点很重要的是,使用这几行命令启用中键滚屏功能,注销登录后就失效。可以把这它们写成shell脚本,设置为gnome登录后自动启动。经测试,只需写入下面三行命令即可以。

#!/bin/bash
# for thinkpad trackpoint, middle key scroll screen
xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Button" 8 2
xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation" 8 1
xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Axes" 8 6 7 4 5

------------------

执行命令输出,仅供参考:

[root@fsc feng]# xinput list-props "TPPS/2 IBM TrackPoint"
Device 'TPPS/2 IBM TrackPoint':
Device Enabled (112):    1
Device Accel Profile (233):    0
Device Accel Constant Deceleration (234):    1.000000
Device Accel Adaptive Deceleration (236):    1.000000
Device Accel Velocity Scaling (237):    10.000000
Evdev Reopen Attempts (230):    10
Evdev Axis Inversion (238):    0, 0
Evdev Axes Swap (240):    0
Axis Labels (241):    "Rel X" (120), "Rel Y" (121)
Button Labels (242):    "Button Left" (113), "Button Middle" (114), "Button Right" (115), "Button Wheel Up" (116), "Button Wheel Down" (117)
Evdev Middle Button Emulation (243):    2
Evdev Middle Button Timeout (244):    50
Evdev Wheel Emulation (245):    0
Evdev Wheel Emulation Axes (246):    0, 0, 4, 5
Evdev Wheel Emulation Inertia (247):    10
Evdev Wheel Emulation Timeout (248):    200
Evdev Wheel Emulation Button (249):    4
Evdev Drag Lock Buttons (250):    0
[root@fsc feng]# xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation" 8 1
[root@fsc feng]# xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Button" 8 2
[root@fsc feng]# xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Timeout" 8 200
X Error of failed request:  BadMatch (invalid parameter attributes)
Major opcode of failed request:  140 (XInputExtension)
Minor opcode of failed request:  57 ()
Serial number of failed request:  18
Current serial number in output stream:  19
[root@fsc feng]# xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Timeout" 8 200^C
[root@fsc feng]# xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Timeout" 8 200
X Error of failed request:  BadMatch (invalid parameter attributes)
Major opcode of failed request:  140 (XInputExtension)
Minor opcode of failed request:  57 ()
Serial number of failed request:  18
Current serial number in output stream:  19
[root@fsc feng]# xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Wheel Emulation Axes" 8 6 7 4 5
[root@fsc feng]# xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Middle Button Emulation" 8 1
[root@fsc feng]# xinput set-int-prop "TPPS/2 IBM TrackPoint" "Evdev Middle Button Timeout" 8 50
X Error of failed request:  BadMatch (invalid parameter attributes)
Major opcode of failed request:  140 (XInputExtension)
Minor opcode of failed request:  57 ()
Serial number of failed request:  18
Current serial number in output stream:  19

 

ghost分区对拷造成分区表损坏修复

有两块硬盘,需要把windows的C盘分区ghost拷到另一块硬盘上,以前从来没有使用分区到分区的还原,这次为了简单,直接分区对分区操作,不过很不幸的是,在进行100%后,就再也不动了,起码二十多分钟都没反应,于是直接关机,重启,可是无论如何都进不了系统,使用U盘的win PE都启动不了。怀疑硬盘故障了,别是硬件故障就好。查原因,先拆掉硬盘看看,可以正常启动win PE;装上另一块硬盘,启动也是正常的。把故障硬盘安到移动硬盘盒里,接到另一笔记本上,运行的linux,Nautilus没有识别,启动终端看设备文件, 输入 #ls /dev/sdb 按tab键,但惊异的看到提示说有255个文件!看来真的是分区表坏掉了。修复吧~~

不过以前在windows下使用winHex手工恢复分区表,实在太累,而且没有通用性,只有winHex本身能识别出丢失分区才便于手工修改,否则工作量是无法估计的。

因为以前用过windows下的一些磁盘工具,而没用过linux下的同类工具,于是首选到windows下看看是否可以识别。不过令人无语的是,根本无法启动windows,连U盘启动PE都不行。只好装到移动硬盘盒里,启动windows后再挂上。不过很可惜,windows磁盘管理根本没有认出来,diskgen也没认出来。只好再挂到linux下,fdisk /dev/sdb 删除后面多余错乱的分区,保存。重新挂载,可以挂载,但后面两个分区丢了。使用testdisk找回分区,好像还比较简单,字符界面,但很清晰明了,只不过是英文,看起来累一些,不明白处还得查字典。找回分区很顺利。然而一个ntfs分区,到windows里提示要格式化。只好使用文件恢复工具找回文件,深度扫描,文件基本上找回来了,但目录结构似乎找不回,所有文件全部恢复到一个目录里。反正也不是非常重要的文件。

后来想到,这个分区其实不应该在windows里格式化,而是使用工具编辑分区表,将该分区编辑为ntfs格式分区,或者所有文件目录结构还是正常的。不过可惜已格,没法试了。

vmware server报错:You have started VMware Server with an out-of-date copy of the application

You have started VMware Server with an out-of-date copy of the application.  VMware Server cannot power on virtual machines using this copy (version 2.0.2).  To power on this virtual machine, run VMware Server from the default location.

vmware server 2 (win32) 启动虚拟机时,报错,如上,重启动vmware服务也不行。网上查原因,似乎都有靠谱。偶然的机缘,把虚拟机文件复制一份,并把复制的拷贝添加到vmware里,启动,居然可以启动了,于是把原vmware从虚拟机里删掉(不要勾选从硬盘里删除,结果你懂的),并把vmware虚拟机目录改名,然后再添加到vmware里,启动,选择“I copy it”,正常启动。

至于是什么原因,不清楚,比较诡异。

通过家用路由器屏蔽可恶的电信114站点

瓷国电信114,很可恶,这就不用说了,屏蔽掉它,通过路由器的防火墙功能可以完美实现,我在家用路由器TP-link WR541G+ 上使用IP地址过滤及域名过滤,阻止114的站点。

打开防火墙功能

设置需要屏蔽的114域名:上海电信的114站点sh.114so.cn,把整个域名全部都屏蔽掉,所以写为.114so.cn;请根据您所在地的114域名做相应修改)

设置屏蔽114站点的IP地址,这里只屏蔽一个ip地址,不过114的站点可能不止一台服务器,把整个ip地址段都屏蔽了也可以。不知道114站点的IP地址?(汗!) 使用命令行,ping一下,或者上ip138.com 查一下。

 

试试访问一个不存在的域名,如http://caonimade114.com/,没有可恶的114搜索了!

由想玩仙剑5开始......

仙剑5上市,周末转软件店,没买到,于是下载,今天晚上安装,数字版 ,要购买CD-key,价格倒不贵。

代理商实在相当垃圾,限量出售光碟版,连普通版都限量,相当可恶。购买cd-key,代理商的官网上,只有两个购买方式,网银与手机。天朝的网银,实在可恶得要死,好像还没有谁支持非IE,甚至还有非IE6不认的!使用农行的USB key,操作系统使用windows7 64位版,升级了IE9,虽然多数时候并不用它;其实更多时候,连windows都不用的,就像写这篇日志时一样,使用linux,centos6发行版——扯远了。

农行的USBkey在win7(x64) + ie9下是可以工作的,但是这仙5代理商就是那个垃圾的百游,网银购买的链接,跳转几个就死了,显示了个about:blank,实在无法想像;重试N次都一样。手机支持,也一样垃圾,试了几次都不行。卸载ie9,使用win7原生的ie8,还是不行。

于是放弃了。转到淘宝上看看,还真的有,而且价格还便宜一点,于是购买,40块钱,可以激活两台电脑的,有20多块钱只激一台的,没有买,因为店家说明是激活过一台的号,使用和话,让人感觉就像是......一样,所以不买。买到的号,在进入游戏、输cd key时,要加上横杠,实在是无法想像,买到的key是连在一起的数字。这编程的人,或者是系统设计哥们儿,程序写得实在傻得可以。直接复制粘贴,谁去在意这些说明啊!结果就错了,还说是xml如何如何的。后来才意识到购买时说明里好像说要加横杠。

游戏感觉比较一般,节奏太慢,经常感觉到不知道是应该点鼠标继续,还是正在播放过场动画;点了几下鼠标却发现没有反应,而人物缓缓的做个动作,或者系统转换一下视角。

总之,感觉仙五不如之前的仙四,或许是现在的心境与之前不同。玩仙四时,刚毕业工作;而将近四年过去了,很多都与之前不同了。