分类目录归档:计算机与 Internet

[转载] perl中的 ” -> ” 这个符号(瘦箭头)的作用

http://bbs.chinaunix.net/thread-973060-1-1.html
-> 有两种用法,都和解引用有关。

第一种用法,就是解引用。
根据 -> 后面跟的符号的不同,解不同类型的引用,
->[] 表示解数组引用,->{} 表示解散列引用,->() 表示解子程序引用。
例子:
$arr_ref = \@array;
$arr_ref->[0] 访问数组 @array 的第一个元素。
$hash_ref = \%hash;
$hash_ref->{foo} 访问 %hash 的 foo 分量
$sub_ref = \&test;
$sub_ref->(1, 2, 3) 使用参数列表 (1,2,3) 来调用 &test 这个子程序。

第二种用法,就是调用类或者对象的方法。
格式:
$obj->method();
或者
ClassName->method();
例如:
$pop3->login( $username, $password );
my $ftp = Net::FTP->new(“some.host.name”, Debug => 0);
这两种用法略有不同,
但是总的来说,符合以下规则:

假设 -> 的左操作数(就是左边那个值,如 $pop3 和 Net::FTP)是 $left,右操作数(就是右边那个值,如 login 和 new)是 $right,那么 -> 的运算规则就是:

if ( ref $left 有效 ){ # 也就是说 $left 是个引用,而不是个裸字
$ClassName = ref $left; # 取引用的类型,当作类名称
}
else{
$ClassName = $left; # 直接把裸字当作类名称
}
复制代码

然后调用:
&{$ClassName::$right}( $left, 原参数列表 )
也就是说把类名称和右操作数拼在一起,当作子程序名称(注),并把左操作数当作第一个参数。

注:Perl 解释器要做的工作其实要比这复杂,它还要考虑到继承的问题。

Fedora 23 升级到Fedora 24

方法参考请看这里,https://fedoramagazine.org/upgrading-fedora-23-workstation-to-fedora-24/

简单说一下通过copr安装的第三方包,在升级之前需要将其block掉,因为网络和其他原因,很多包都无法正常升级,为避免问题,可以在系统升级后再更新这些第三方的包。
例如:

## 关闭第三方包
sudo dnf config-manager –set-disabled rpmfusion-free
sudo dnf config-manager –set-disabled rpmfusion-nonfree
sudo dnf config-manager –set-disabled rpmfusion-free-updates
sudo dnf config-manager –set-disabled rpmfusion-nonfree-updates

## 开启第三方包
sudo dnf config-manager –set-enabled rpmfusion-free
sudo dnf config-manager –set-enabled rpmfusion-nonfree
sudo dnf config-manager –set-enabled rpmfusion-free-updates
sudo dnf config-manager –set-enabled rpmfusion-nonfree-updates

另外rpmfusion也需要自己手动升级,国内可能被墙,自己找办法下载下来再更新。

dnf install http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-24.noarch.rpm

由于更新时disable了rpmfusion所以ffmpeg和gstreamer1-libav需要重新安装一次。

python包出现如下问题无法rpm更新时:
error: unpacking of archive failed on file /usr/lib/python3.4/site-packages/requests/packages/chardet: cpio: rename

原因是之前这些包是用pip install,现在需要将原来的包uninstall,重新更新即可,参考这里,https://bugzilla.redhat.com/show_bug.cgi?id=1207981

 

让用户在多个WordPress网站之间通行登录

这个是《同一个用户登录多个wordpress站点》的后续系列。

我测试了很多方法,只有《多个wordpress网站共享用户数据的方法》中提到的方法可行。

现在记录自己的配置方法如下:

1. 出于安全问题,cookie不能在多域名之间共享,如果你追求的是www.youdomain.com和www.anotherdomain.com之间通行登陆,以下的方法不适用。也许你应该尝试自动登录

2. cookie也不会在多浏览器之间共享,以下的方法只能实现在同一个浏览器中通行登陆。

3. 支持的类型:

次级域名之间的通行登陆,例如sub1.yourdomain.com和sub2.yourdomain.com之间通行登陆

同一个域名下不同目录之间互相登陆,例如www.yourdomain.com和www.yourdomain.com/site以及www.yourdomain.com/site1之间通行登陆。

实现步骤:

1. 打开主站的wp-config.php,找到如下代码, 如果宏定义的值不是随机字符串,点击这里生成。
define(‘AUTH_KEY’, ‘{+Y:wtH~E}E2g7#$/_{%df9F2!9ed}m=E%^}%,[Z#;+R+vk]@q:x4u)?G,-#I89g’);
define(‘SECURE_AUTH_KEY’, ‘ -$Hdq00N4F|iv4n&|}W]h:U}5?+jUb%)G#zgr={ 4yvgSRO;h-K+}R;&n.AAFv0’);
define(‘LOGGED_IN_KEY’, ‘/K{%RclWh_e|46hl6w.b&C*U2cQ$&ZpL)n@|itUtHPm#PMS+9Jd|m%*5h#NQ1{k%’);
define(‘NONCE_KEY’, ‘-Aluq5#|Pp:D6EsB8G-os=o${5FmP6!S#U)xgQsvAR2+0E/mz,{[b+6[zX4]OnUU’);
define(‘AUTH_SALT’, ‘X:_SQx~;s}9|FIZ:pvR|beA>Jca_}.;S+sW>-^GFdFQ zjQUA<+G0z{_S+M’);
define(‘LOGGED_IN_SALT’, ‘d`U.1inPDll}cH1Qcp,IaUeB+TO_m440$>IGs4B;v$)q^N>g[!&;t’);
define(‘NONCE_SALT’, ‘t`.LtDKyc9(fQlA@EMrvu*F(U6&CV:%qKQ:eKz+0I*.V,0(@9E~9K!2087pJqs=Q’);

 

2. 拷贝主站wp-config.php中的AUTH_KEY和SECURE_AUTH_KEY到英文站的wp-config.php中,替换相应的行。如果嫌麻烦上面代码全部拷贝到英文站也可以。

3. 在主站和英文站的wp-config.php中创建下面代码,记得去生成一个复杂的随机字符串,不要直接拷贝,主站和英文站的SECRET_SALT值要相同
define(‘SECRET_SALT’, ‘Q$QuHIfQO^(CtrL5D(fcG$miB,fE2]-~::qoB,O_?o|TfgNfQB/x/kv$Tg1Aa7Hf’);

4. 在主站和英文站的wp-config.php中创建如下代码

define(‘ADMIN_COOKIE_PATH’, ‘/’);
define(‘COOKIEPATH’, ‘/’);
define(‘SITECOOKIEPATH’, ‘/’);
define(‘COOKIEHASH’, md5(‘jldsfjoifejlkoDS9r23jlsdjf’)); /*用自己的随机字符串替换*/

5. 不同次级域名之间的通行登陆
在所有网站的wp-config.php中再加上
define(‘COOKIE_DOMAIN’, ‘yourdomain.com’);
不要加www

 

 

同一个用户登录多个wordpress站点

在一个服务器上,安装多个wordpress网站。例如:A网站为主站,域名是 example.com

B网站是子站,域名是b.example.com

首先域名解析的时候,b.example.com是A记录,同A网站一样需要指向同一个服务器ip。

nginx的配置里就是

server{
root /var/www/html/siteA;
}
server{
root /var/www/html/siteB;
}

其余部分都一样。

首先安装siteA。

然后安装siteB,打开 wp-config.php,将其中

$table_prefix = ‘wp_’;

改为其他的表头,在这里我改成了

$table_prefix = ‘wpB_’;

然后就可以正常安装siteB。

 

安装完成之后,可以用siteB的管理员账号登录一下,记得用完之后要退出登录。接下来,我们来打通A、B两站的用户数据。

 

在siteB的目录下,wp-config.php 文件中,在

 /* 好了!请不要再继续编辑。请保存本文件。使用愉快! */

这句话之前,插入

define( ‘CUSTOM_USER_TABLE’, ‘wp_users’ );
define( ‘CUSTOM_USER_META_TABLE’, ‘wp_usermeta’ );

这时A站的用户都可以登录B站。但安装B站时的管理员用户已经无法登录B站。

用A站的管理员用户名登录B站时,会发生没有权限访问后台的问题。这时需要在wp_usermata这张表里改管理员用户的一些信息。

首先要确定A站管理员用户的UID,例如我的管理员用户UID是6.

那么在mysql数据库中,选中wordpress的数据库。这里假设wordpress数据库名字就是wordpress,

数据库B的表头是wpB_。

use wordpress;
INSERT INTO wp_usermeta(user_id,meta_key,meta_value) VALUES(6, ‘wpB_capabilities’, ‘a:1:{s:13:”administrator”;s:1:”1″;}’);
INSERT INTO wp_usermeta(user_id,meta_key,meta_value) VALUES(6, ‘user_level’, 10);

 

如果发现安装的不好,需要删除重新安装,怎么删除所有B站的表呢?用下面这条mysql语句可以生成所有的要删除的table,然后将生成的命令复制到终端中,就可以删除了。

SELECT CONCAT(‘drop table ‘,table_name,’;’) FROM information_schema.tables where information_schema.tables.TABLE_NAME LIKE ‘wpB_%’ ;

从域名解析到依法治国定律

依法治国定律一: 一切可以通过合法途径寻租的权力,都会以最快的速度变现。

依法治国定律二: 暂时不能通过合法途径寻租的权力,颁布一部法律使其合法。

 

最近,有关部门发现了比去机房拔网线更便捷的方法,那就是通知国内的域名注册商对域名进行“clientHold(域名暂停解析)”,clientHold是注册商用来禁用一个域名最简单的手段。今年以来,发生了多起国内知名网站被域名注册商“clientHold”的事件。

《中国互联网域名管理办法》: 不得为境外注册的域名提供境内接入服务

http://www.v2ex.com/t/266778?p=1

http://www.williamlong.info/archives/4557.html

一个月后拭目以待,看看究竟是否被通过!