nginx用于大型网站,但是也有一个很大的问题那就是跨域问题,下面我们来看看关于修改php教程源码来解决跨域的问题。下面来看方法。
google搜之有两个比较广为流传的方法,其中最完美的莫过于直接修改php源代码,对打开目录进行鉴权(搜出来的资料最早是anxsoft.com提供的代码)。
因为需要更改php源程序后,重新编译php。在使用fpm方式安装时,打补丁过程中会修改php的文件,所以需要在打完fpm补丁后再修改php源程序。
tar zxvf php-5.2.14.tar.gz
gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1
cd php-5.2.14/
vi main/fopen_wrappers.c
找到php_check_open_basedir_ex方法,在char *end;和pathbuf = estrdup(pg(open_basedir));之间插入以下的代码:
char path_copy[maxpathlen];
int path_len;
path_len = strlen(path);
if (path_len >= maxpathlen) {
errno = eperm;
return -1;
}
if (path_len > 0 && path[path_len-1] == php_dir_separator) {
memcpy(path_copy, path, path_len+1);
while (path_len > 1 && path_copy[path_len-1] == php_dir_separator) path_len--;
path_copy[path_len] = '';
path = (const char *)&path_copy;
}char *env_doc_root;
if (pg(doc_root)) {
env_doc_root = estrdup(pg(doc_root));
} else {
env_doc_root = sapi_getenv("document_root", sizeof("document_root")-1 tsrmls_cc);
}
if (env_doc_root) {
int res_root = php_check_specific_open_basedir(env_doc_root, path tsrmls_cc);
efree(env_doc_root);
if (res_root == 0) {
return 0;
}
if (res_root == -2) {
errno = eperm;
return -1;
}
}
然后编译安装php。
并php.ini的open_basedir配置
open_basedir = "/tmp/:/var/tmp/"
这样就彻底解决了,webshell跨站点目录访问问题