在PHP中将图片转换为base64编码的方法

Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。

这里我们分享一个将图片转换为base64编码格式的方法:

<?php
$img = 'test.jpg';
$base64_img = base64EncodeImage($img);

echo '<img src="' . $base64_img . '" />';

function base64EncodeImage ($image_file) {
    $base64_image = '';
    $image_info = getimagesize($image_file);
    $image_data = fread(fopen($image_file, 'r'), filesize($image_file));
    $base64_image = 'data:' . $image_info['mime'] . ';base64,' . chunk_split(base64_encode($image_data));
    return $base64_image;
}
?>

通过上面的方法转换后得到的base64编码字符串,可以存放到数据库中,需要时可以直接从数据库中读取,减少访问图片时的请求数量。

另:这个方法已经包含进MiniFramework的全局函数库中了。

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

关于Memcached对key和value的限制

Memcached中对于键(key)的限制为最大不超过250个字符。同时,对于存储的value最大可以接受的数据不能超过1MB。

我们可以通过修改源代码的方式来改变对于key的长度限制。

方法为:

修改memcached.h文件,找到 #define KEY_MAX_LENGTH 250,将250修改为其他数值,例如:#define KEY_MAX_LENGTH 512

而关于value的1M的限制,可以在启动命令中增加-I 2m这样的参数,就可以将原本1M的限制提升至2M。

转载:Nginx多站点虚拟主机实现独立启动停止php-fpm和权限控制设置

说明:

站点1:bbs.osyunwei.com 程序所在目录/data/osyunwei/bbs

站点2:sns.osyunwei.com 程序所在目录/data/osyunwei/sns

相关配置文件目录:

nginx主配置文件:/usr/local/nginx/conf/nginx.conf

php安装目录:/usr/local/php5/

站点1虚拟主机配置配置文件:/usr/local/nginx/conf/vhost/bbs.conf

站点2虚拟主机配置配置文件:/usr/local/nginx/conf/vhost/sns.conf

实现目的:

1、可以对站点1和站点2单独启动、停止php-fpm

2、站点1和站点2的php运行权限相互隔离,不能跨目录浏览,即站点1内的php木马不能访问站点2中的内容,

同理,站2内的php木马不能访问站点1中的内容。

实现方法:

阅读更多

PHP开源框架MiniFramework发布0.7.0版

在经过了将近一年的“偷懒”后,站长终于在2016年到来后,又开始更新MiniFramework了,这次发布的0.7.0主要是新增了全局函数库和缓存类库。缓存目前可以支持文件存取和Memcache两种方式,欢迎大家尝试,并请多多指教。

MiniFramework源码请移步至:https://github.com/jasonweicn/MiniFramework

最新的0.7.0版请移步至:https://github.com/jasonweicn/MiniFramework/releases/tag/miniframework-0.7.0

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

升级CentOS的OpenSSH 搭建SFTP Server

SFTP是 Secure File Transfer Protocol 的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

OpenSSH 4.8p1以上的版本才支持SFTP所需的chroot等指令,我的CentOS 5.X服务器的OpenSSH版本过低,需要先对OpenSSH升级。

提示:在升级OpenSSH前,为防止意外出现,我临时开启了telnet,通过telnet连接到服务器后再进行操作(升级完记得关闭telnet)。

service sshd stop #关闭sshd
mv /etc/ssh/sshd_config /etc/ssh/sshd_config_bak #将原有的设置文件改名
wget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-4.9p1.tar.gz
tar zxvf openssh-4.9p1.tar.gz
cd openssh-4.9p1
./configure --prefix=/usr --sysconfdir=/etc/ssh
make
make install

 

如果上面的过程很顺利的话,下面这行命令应该可以正常启动sshd

service sshd start

 

接下来配置sshd_config,设置SFTP的用户和目录

#Subsystem      sftp    /usr/libexec/sftp-server
Subsystem       sftp    internal-sftp

Match User xxxxxx
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
ChrootDirectory /var/htdocs

上面设置中“xxxxxx”替换为你系统中专门用于SFTP的用户名即可,这里我用的是User,也可以用Group来指定一个用户组。

设置好后重启sshd即可。

注册了miniframework.com和.net

昨天看到Godaddy 36%的offer没能把持住,除了将原本已经注册的miniframework.com又续费了一年外,还成功把miniframework.net注册下来了。接下来就是要考虑一下是否用这两个域名给我那个练手的框架搭个“官网”出来^^

用SS5在Linux上搭建Socks5 Proxy代理服务器

SOCKS5 是一个代理协议,通过将前端发来的请求转发给真正的目标服务器, 模拟了一个前端的行为。在这里,前端和SOCKS5之间也是通过TCP/IP协议进行通讯,前端将原本要发送给真正服务器的请求发送给SOCKS5服务器,然后SOCKS5服务器将请求转发给真正的服务器。

下面我们将用SS5在Linux上搭建一个Socks5 Proxy Server,具体过程如下:

首先,编译安装SS5需要先安装一些依赖组件

yum -y install gcc gcc-c++ automake make pam-devel openldap-devel cyrus-sasl-devel

接下来,我们从 http://ss5.sourceforge.net/ 下载SS5最新版本的源代码后,开始编译安装:

tar zxvf ./ss5-3.8.9-8.tar.gz
cd ss5-3.8.9
./configure
make
make install

让SS5随系统一起启动

chmod +x /etc/init.d/ss5
chkconfig --add ss5
chkconfig --level 345 ss5 on

开启用户名密码验证机制

vi /etc/opt/ss5/ss5.conf

在ss5.conf中找到auth和permit两行,按照下面的格式进行修改

auth      0.0.0.0/0       -         u
permit u        0.0.0.0/0       -       0.0.0.0/0       -       -       -       -       -

设置用户名和密码

vi /etc/opt/ss5/ss5.passwd

一行一个账号,用户名和密码之间用空格间隔,例如:

user1 123
user2 234

设置端口

vi /etc/sysconfig/ss5

在/etc/sysconfig/ss5这个文件中,添加下面这一行命令,-b后面的参数代表监听的ip地址和端口号

# Add startup option here
SS5_OPTS=" -u root -b 0.0.0.0:8080"

启动

service ss5 start

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

Linux中编译安装Redis和PHP扩展

Redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

 

下面,我们以Redis 3.0.2为例,对编译安装方法进行说明:

tar zxvf ./redis-3.0.2.tar.gz
cd redis-3.0.2
make
make install //默认情况下会部署到/usr/local/bin目录下

mkdir /etc/redis //用于存放位置文件
mkdir /usr/local/redis //用于存放数据

cd utils
./install_server.sh //运行安装脚本(守护进程、配置文件部署等)

Redis安装好后,接下来我们来为PHP安装Redis扩展:

tar zxvf ./phpredis-2.2.7.tar.gz
cd phpredis-2.2.7
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

上面的操作完成后,会在/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626目录下生成出一个redis.so文件,下面我们需要把这个so文件加到php.ini中

vi /usr/local/php/etc/php.ini

具体设置如下:

extension_dir="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"
extension=redis.so

阳光部落原创,更多内容请访问 http://www.sunbloger.com/

通过iptables规则让Linux主机屏蔽Ping

我们以CentOS为例,向iptables中添加如下三条规则:

-A RH-Firewall-1-INPUT -s 192.168.0.100 -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A RH-Firewall-1-INPUT -s 192.168.0.100 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type 8 -j DROP
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type 0 -j DROP

第1、2行定义了允许192.168.0.100这个ip允许向主机发出Ping请求

第3、4行定义禁止其他所有地址向主机发出Ping请求,接收到的数据包会被丢弃(DROP)

阳光部落原创,更多内容请访问 http://www.sunbloger.com/