标签归档:php

推荐一个支持git的网站

推荐一下提供git服务的网站 https://bitbucket.org/phpbird ,和https://github.com/差不多,但是可以有无限的private repositories。
git出来好多年了,没怎么用过,有用过的同学可以来交流一下。

推荐国外的WebFaction空间

推荐一个vps服务器

 

https://www.vultr.com/

最近更有25$的优惠

推荐另外一个vps服务器

WebFaction

这是个英国的公司,创建于2003,有美国,欧洲,新加坡的服务器可供选择,换服务器在控制面板里提交一下即可,不怕被墙了。公司网站是http://www.webfaction.com/

如果你最近要买空间,强烈推荐WebFaction。最低$5.5每月(一下付5年是能拿到这个最低价),限制比较少,可通过控制面板安装SVN,Trac,Git做版本管理和项目管理,也可以在控制面板一键安装Wordpress之类的blog、cms程序,或者配置 AWStat之类的统计工具。更重要的是,Webfaction的虚拟主机和别的最大的不同在于他们提供Shell的访问权限,允许客户编译和安装自己需要的应用,同时每个用户的可用内存高达256MB。支持SSH,翻墙很爽,而且支持自己编译、安装程序、自己开端口,比如MangoDB。还可以安装Perforce在里面,设置好Crontab跑定时备份脚本。

更多功能和价格请点击这里

我用电信网络,访问美国服务器很快,通过SSH翻墙下载,500KB每秒的速度可以轻易达到。

SVN,Git hosting之类的服务就要多少钱啊?光这一个就值回票价了。何况还可以自己装Perforce。如果是做dev,WebFaction绝对是首选。

Webfaction将Django集成到其服务器上,目前该产品在Django社区中非常的受欢迎,也是为数不多的能够对Django提供很好支持的虚拟主机。

空间100G,每月流量600G,网站数量不限制,邮箱地址不限制,数据库个数不限制,SSH and SFTP users也不限制。还可以额外购买硬盘,带宽,内存和ip地址。
Webfaction承诺60天内无条件退款。

WebFaction网友的点评

国内国外访问速度都还可以,也很稳定,用两年了

WebFaction支持多SSH账号登录么?像DreamHost那样? 支持SSH登录,但多用户没弄过,就一个人用。

支持多用户,在上面部署的DJANGO,配置简单.

WebFaction优惠码:现在有$53/年的优惠

注册请点击这里

CentOS 6 PHP Mcrypt 支援問題

剛有學生詢問在 CentOS 6 底下 PHP 怎麼沒有 php-mcrypt 模組可以安裝,看了一下光碟內容確實沒這些套件,解決方式如下,可以透過EPEL (Extra Packages for Enterprise Linux) 套件庫來解決缺少的相關套件:

首先,安裝對應的Release檔案:rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
接著,更新套件庫:yum update
更新後,可以透過 yum repolist 看到套件庫清單中已經有一個新的套件庫,名稱為 epel
之後再試試看 yum install php-mcrypt 便可以透過 epel 套件庫來安裝

转自:http://figaro.neo-info.net/?p=754&cpage=1#comment-300

Deprecated: Function session_register() is deprecated

php从5.2.x升级到5.3.2.出来问题了。有些原来能用的程序报错了。
报错内容是
Deprecated: Function session_register() is deprecated
查了一下是5.3这个session_register就不让用了,降回去?不爽。
搜了一把,有个解决方法是写一个函数

<?php 
// Fix for removed Session functions 
function fix_session_register(){ 
    function session_register(){ 
        $args = func_get_args(); 
        foreach ($args as $key){ 
            $_SESSION&#91;$key&#93;=$GLOBALS&#91;$key&#93;; 
        } 
    } 
    function session_is_registered($key){ 
        return isset($_SESSION&#91;$key&#93;); 
    } 
    function session_unregister($key){ 
        unset($_SESSION&#91;$key&#93;); 
    } 
} 
if (!function_exists('session_register')) fix_session_register(); 
?> 

查了一下出现这个问题的地方不多,找到了另外一个方法,直接

session_register( “abc” ) ;
改成
$_SESSION[‘abc’] = null;
即可

freebsd升级mysql client

mysql serve 是5.1.x的,客户端是 5.0.x的,用phpmyadmin,总有一个提示,说版本不匹配,感觉不爽。
用Ports的方法升级客户端,不行,报错。说5.1和5.0有冲突,只能先删除。
用了 portmaster -o databases/mysql51-client mysql-client-5.0.89
也不行。
加上 export CONFLICTS=” 后执行,还是不行。看了
pkg_info mysql\*

Required by:
php5-mysql-5.2.12
php5-mysqli-5.2.12
因为还跑着网站,就没敢贸然行事。
这天趁网站人少的时候,干了一把
删除老的package
#pkg_delete -f mysql-client-5.0.89
到mysql5.1 client的目录
#cd /usr/ports/databases/mysql51-client

#make install clean
。。
。。
等待
。。
好了看一下版本
#mysql -V
mysql Ver 14.14 Distrib 5.1.42, for portbld-freebsd8.0 (amd64) using 5.2
用portmaster升级2个有依赖的php组件
#portmaster php5-mysql php5-mysqli
等待


重启apache,好了。
出乎意料的是安装过程中,php可以正常的链接mysql。网站正常,还以为pkg_delete会删除使用的so文件,导致网站出状况。

感谢hshh

ecshop 2.6.2 sitemaps.php的一个bug

生成的sitemap文件,商品分类文件,如果是
http://www.abc.com/category-1-b0.html
在sitemap文件里面少了一个”/”
结果变成了
http://www.abc.comcategory-1-b0.html
分类是
修改代码
sitemaps.php大约第66行

'loc'        =>  "$site_url" . build_uri('category', array('cid' => $row['cat_id'])),

改成

'loc'        =>  "$site_url/" . build_uri('category', array('cid' => $row['cat_id'])),

即可

FCKEditor XML Request Error:Internal Server Error(500)

原来一直能用的ecshop后台信息发布里面的fckeditor上传功能,换了个机器后不能用了。以为是文件损坏,上传一边不行。
什么xml错误,还弹出一个大的JavaScript alert警告框,内容就是服务器端错误的500内容
网上搜,又说是配置问题,主题问题,想想都不应该,直接请求
filemanager/connectors/php/connector.php
出了服务器的500错误,html文件能访问,txt也行。
后来从根目录开始查,发现到fckeditor目录里面的php文件开始不能访问。
改了fckeditor目录的属性为755,问题解决。

修改ecshop后台admin目录为任意目录名

ecshop有个地方配置admin的目录名
data/config.php

$admin_dir = “admin”;
但是直接改不行,因为很多地方,这个目录名字被硬编码进去了,直接改会有很多地方报错。

网上搜到一篇文章,整理了一些需要修改的地方,内容转帖如下:

1.修改data/config.php
   1. $admin_dir = "admin";
修改成
   1. $admin_dir = "新目录名";
2.修改admin/index.php
   1.   //货号
   2.         require_once(ROOT_PATH . 'admin/includes/lib_goods.php');
修改成
   1. require_once(ROOT_PATH . $admin_dir.'/includes/lib_goods.php');
3.修改admin/database.php
   1. require_once(ROOT_PATH . 'admin/includes/cls_sql_dump.php');
修改成
   1. require_once(ROOT_PATH . $admin_dir.'/includes/cls_sql_dump.php');
4.修改admin/get_password.php
   1. $reset_email = $ecs->url() . 'admin/get_password.php?act=reset_pwd&uid='.$admin_id.'&code='.$code;
   2.   修改成
   3. $reset_email = $ecs->url() .  $admin_dir.'/get_password.php?act=reset_pwd&uid='.$admin_id.'&code='.$code;
5.修改admin/goods.php
   1. require_once(ROOT_PATH . '/admin/includes/lib_goods.php');
   2.   修改成
   3. require_once(ROOT_PATH . $admin_dir.'/includes/lib_goods.php');
6.修改admin/check_file_priv.php
   1. $dir[]                     = 'admin';
   2.   修改成
   3. $dir[]                     = $admin_dir;
7.修改admin/includes/init.php
   1. if (file_exists(ROOT_PATH . 'data/config.php'))
   2. {
   3.      include(ROOT_PATH . 'data/config.php');
   4. }
   5. else
   6. {
   7.      include(ROOT_PATH . 'includes/config.php');
   8. }
   9.   修改成下面代码,并将代码移至“/* 取得当前ecshop所在的根目录 */”注释之前。
  10. if (file_exists('../data/config.php'))
  11. {
  12.      include('../data/config.php');
  13. }
  14. else
  15. {
  16.      include('../includes/config.php');
  17. }
   1. define('ROOT_PATH', str_replace('admin/includes/init.php', '', str_replace('\\', '/', __FILE__)));
   2.   修改成
   3. define('ROOT_PATH', str_replace($admin_dir.'/includes/init.php', '', str_replace('\\', '/', __FILE__)));
 
   1. require(ROOT_PATH . 'admin/includes/lib_main.php');
   2.   修改成
   3. require(ROOT_PATH . $admin_dir.'/includes/lib_main.php');
   1. require(ROOT_PATH . 'admin/includes/cls_exchange.php');
   2.   修改成
   3. require(ROOT_PATH . $admin_dir.'/includes/cls_exchange.php');
   1. $smarty->template_dir  = ROOT_PATH . 'admin/templates';
   2.   修改成
   3. $smarty->template_dir  = ROOT_PATH . $admin_dir.'/templates';
 
   1. $admin_path = preg_replace('/:\d+/', '', $ecs->url()) . 'admin';
   2.   修改成
   3. $admin_path = preg_replace('/:\d+/', '', $ecs->url()) . $admin_dir;
8.修改include/lib_main.php
   1. include_once(ROOT_PATH . 'admin/includes/lib_template.php');
修改成
   1.
   2. global $admin_dir;
   3. include_once(ROOT_PATH . $admin_dir.'/includes/lib_template.php');
9.修改include/cls_ecshop.php
   1.     $curr = strpos(PHP_SELF, 'admin/') !== false ?
   2.   preg_replace('/(.*)(admin)(\/?)(.)*/i', '\1', dirname(PHP_SELF)) :
   3.   dirname(PHP_SELF);
修改成
   1. global $admin_dir;
   2.         $curr = strpos(PHP_SELF, $admin_dir.'/') !== false ?
   3.                 preg_replace('/(.*)('.$admin_dir.')(\/?)(.)*/i', '\1', dirname(PHP_SELF)) :
   4.                 dirname(PHP_SELF);
10.如果担心$admin_dir变量注入安全问题可以在data/config.php文件中define('EC_CHARSET','utf-8');后增加
   1. define('ADMIN_DIR','新目录名');
然后将所有修改的$admin_dir变量修改成ADMIN_DIR,例如:
   1. require_once(ROOT_PATH . $admin_dir.'/includes/lib_goods.php');
   2. 修改成
   3. require_once(ROOT_PATH . ADMIN_DIR.'/includes/lib_goods.php');
11.根据pjb126 网友提示修改/admin/picture_batch.php
将
   1. include_once(ROOT_PATH . '/admin/includes/lib_goods.php');
   2. 修改成
   3. include_once(ROOT_PATH .$admin_dir.'/includes/lib_goods.php');
12.新增修改quotation.php
   1. include_once(ROOT_PATH . 'admin/includes/lib_main.php');
修改成
   1.
   2. global $admin_dir;
   3.     include_once(ROOT_PATH . $admin_dir.'/includes/lib_main.php');

但是,我改过这些之后,还发现可能还有三个文件需要修改

admin/filecheck.php:
api/client/includes/lib_api.php
ecshopfiles.md5

关键字 ‘admin’

如何在wordpress的the_excerpt中使用nextgen-gallery(NGG)图片

NextGEN gallery是个很不错的wordpress相册插件。
新版本的wordpress有了一个the_excerpt的方法可以用,原来就有?不知道。
the_excerpt主要是调用原来的摘要部分,供模板调用。但是和the_content的区别是,the_excerpt里面不支持nextgen-gallery(NGG)的singpic,gallery等标签不能用。如果在模板里面用了the_excerpt,但是又想显示图片就不方便了。
用的是1.1.0版本,查了一下代码,找到
lib\shortcodes.php

class NextGEN_shortcodes
大概在18行,看到一行注释,说如果在the_excerpt里面用会有不期望的输出。如果你高兴就去掉下面的注释。

 
// add_filter('the_excerpt', array(&$this, 'convert_shortcode'));
// add_filter('the_excerpt', 'do_shortcode', 11);

改成

add_filter('the_excerpt', array(&$this, 'convert_shortcode'));
add_filter('the_excerpt', 'do_shortcode', 11);

测试可以,没发现啥异常。先用着吧。
——————–
新的版本已经去掉了这2行,要自己加进去。