网站移植

把Linux上的网站移植到Windows上来,网站采用Thinkphp框架。记录下移植步骤及遇到的问题。
1. 复制源代码、数据库。数据库使用的为MySql,使用mysqldump命令备份数据库:mysqldump -uroot -p123456 dbname > /opt/www/dbname.sql。
2. windwows server 2008主机上安装apache、mysql,解压php到C:\Program Files\php,并在环境变量中添加php和php\ext
   apache:apache_2.2.9-win32-x86-openssl-0.9.8h-r2
   mysql: mysql-installer-community-5.6.28.0.msi
   php:php-5.3.5-Win32-VC6-x86.zip
3. 修改配置文件
   php.ini:
        extension_dir = "C:\Program Files\php\ext"
        extension=php_gd2.dll
        extension=php_imap.dll
        extension=php_mbstring.dll
        extension=php_exif.dll      ; Must be after mbstring as it depends on it
        extension=php_mysql.dll
        extension=php_mysqli.dll
   httpd.conf:
        把LoadModule前的 ‘#‘ 全去掉了
        添加:     LoadModule php5_module "C:/Program Files/php/php5apache2_2.dll"
                AddType application/x-httpd-php .php
                PHPIniDir "C:/Program Files/php"    
        设置网站目录    
        DirectoryIndex index.php
4. 复制源代码、数据库到Windows server主机。
   导入数据库时使用mysqldump会出错,使用如下方法导入:(网站中连接数据库所用用户名秘密并非root,使用的为dbuser,因此此处要添加用户)
    //登录MYSQL
    >mysql -u root -p
    >密码
    //创建用户,用户名dbuser,密码dbpassword
    GRANT USAGE ON *.* TO ‘dbuser‘@‘localhost‘ IDENTIFIED BY ‘dbpassword‘ WITH GRANT OPTION;

//创建一个数据库(dbname)
    mysql>create database dbname;

//切换到数据库dbname
    mysql>use dbname;

//导入数据
    mysql>source dbname.sql;

//授权dbuser用户拥有dbname数据库的所有权限
    grant all  on dbname.* to [email protected] identified by ‘dbpassword‘;

出现的问题及解决办法:
1. 页面跳转问题。点击页面元素无法跳转,查看其链接为127.0.0.1/aa/bb,但127.0.0.1/index.php/aa/bb可正常访问。
   解决方法:修改apache配置文件去除thinkphp url中的index.php
            把 LoadModule rewrite_module modules/mod_rewrite.so 前的‘#‘去掉
            AllowOverride None 将None改为 All
2. 不显示验证码
   解决方法:因为php已加载gd库,并且也没发现php中有bom,于是添加 ob_clean(),显示验证码。(验证码是显示了,又造成了后面的问题,待会这儿还要改)
3. 点击登录没有反应
   查看登录按钮的js处理:
   $("#frm_login").ajaxSubmit({
                    type:"post",
                    url:url,
                    dataType:"json",
                    success:function(data){
                        if(data[0] == "ok")
                        {
                            ......
                        }
                        else
                        {
                            ......
                        }
                    }
                });
    发现不执行success,网上搜原因($.ajax返回的JSON格式的数据后无法执行success的解决方法)发现,指定了dataType:‘json‘,对Json格式的要求就非常严格起来了,必须要这种格式的{"键":"值","键":"值"}。那就是JSON数据的问题了,把dataType:"json" 改为 dataType:"html",然后通过alert(data)查看data的内容,发现data为:
    <br /><b>Notice</b>:  Undefined index: auto_login in <b>C:\www\chexiaobao\cxb\libs\models\UserModel.class.php</b> on line <b>501</b><br />["ok"]
    难怪不执行,明显不是Json格式,还出错了,网上查php中Undefined index的解决方法,修改 php.ini 中的error_reporting = E_ALL 修改为 error_reporting = E_ALL & ~E_NOTICE,重启下APCHE服务器,需改后data为:
    ["ok"]
    好了,改回dataType:"json",执行,却发现了另一个问题,登录后页面不跳转,需刷新下才跳转。
4. 登录后页面不跳转
   这个地方看了好久也没发现问题,突然想到在显示验证码时添加了 ob_clean(),把缓存给清了,而原来的代码中并没有这一句,难道是这里的问题?那去了这一句怎么显示验证码呢?不显示验证码肯定有地方存在bom,写脚本查找bom:
    <?php  
    if (isset ( $_GET [‘dir‘] ))
    {
        //config the basedir    
        $basedir = $_GET [‘dir‘];
    }
    else
    {    
        $basedir = ‘.‘;  
    }    
      
    echo $basedir;
    checkdir ( $basedir );    
    
    function get_extension($file)
    {
        return pathinfo($file, PATHINFO_EXTENSION);
    }

function checkdir($basedir)
    {    
        if ($dh = opendir ( $basedir ))
        {    
            while ( ($file = readdir ( $dh )) !== false )
            {    
                if ($file != ‘.‘ && $file != ‘..‘)
                {    
                    if (! is_dir ( $basedir . "/" . $file ))
                    {
                        // 如果是文件    
                        if (get_extension($file) == "php" )
                        {
                            checkBOM ( "$basedir/$file" );
                        }
                        
                    }
                    else
                    {    
                        //echo $basedir;
                        //echo "\n";
                        $dirname = $basedir . "/" .$file; // 如果是目录    
                        checkdir ( $dirname ); // 递归    
                    }    
                }    
            }    
            closedir ( $dh );    
        }    
    }    
      
    function checkBOM($filename)
    {        
        global $auto;    
        $contents = file_get_contents ( $filename );    
        $charset [1] = substr ( $contents, 0, 1 );

if ( $charset [1] != "<" || ord ( $charset [1] ) == 239)
        {
            echo $filename;
            echo "\n";
        }
    }    
    ?>
    改的网上的代码,运行代码,发现显示验证码的那个php开头果然有bom,一开始没发现......去掉bom,然后去掉ob_clean(),验证码显示成功,再登录成功跳转。

时间: 2024-10-09 23:22:21

网站移植的相关文章

网站移植到linux上后常犯的错误

常犯的错误 1:gcc库没装或者没装全 表现:没有可用的C编译器 同类错误:提示g++ not found, 解决:出现以上错误,则是因为gcc编译器没装,或者是没装全. 挂载光盘,到Pakeges里目录下去, 搜索gcc, 把相关的软件都装上. 在安装gcc的过程中,因为依赖性问题,在安装gcc之前 需要B->C->D软件 没有libppl*相关的软件,怎么办? 答:在光盘的packges里目录下,ls|grep ppl,找相关的软件装上. 2: 这类提示,缺少curses/tempcap库

Joomla网站迁移

最近有一个项目,涉及到一个网站的静态化操作.该网站运行在LAMP环境下.为了更好的模拟真实的运行环境,并且方便测试.需要将目标网站移植到本地环境.由于我习惯在wamp下工作,而现在的要求是在真实的LAMP环境下.那么需要搭建一个LAMP环境,本文将记录一些在搭建环境过程中遇到的一些问题. 搭建LAMP环境 对于Linux系统虽不说熟悉,但一些基本的操作还是会的.也懂得yum和rpm.所以大致上清楚要做些什么. 最开始的我在虚拟机上安装了一个centos 操作系统.然后依照 http://www.

自己centos7架设hexo网站

自己centos7架设hexo网站 一:安装博客框架 1.安装git yum install git-core 2.安装nvm(后面安装Node.js的最佳方式是使用nvm,所以这里安装nvm) wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash 安装完之后需要重启一下,不然下面的nvm命令不能用 3.安装node.js nvm install stable 4.安装hexo n

前端的一些疑问总结01

1,关于web app (1)em是相对于父元素的字体大小改变的 em 称为给定字体的font-size值,如果字体的font-size值为14px,那么对于该元素,1em就等于14pxem 不仅可以设置字体大小,还可以设置宽高,如果H1的字体大小为24px,那么它的左边距1em就等于24px (2)rem 是相对于根元素html设置的其实rem的值和em的意思都差不多,唯一的就是em是相对于父元素,而rem是相对于根元素的,为什么许多网站设置font-size为62.5%呢?因为,大多数浏览器

《HTML 5网页开发实例详解》样章、内容简介、前言

http://spu.jd.com/1167757597.html http://product.dangdang.com/23484942.html 样章 http://download.csdn.net/download/hdzn0603/7421803 内容简介 <HTML 5网页开发实例详解>从实际的应用场景出发,结合当下的热门技术,深入浅出地介绍了 HTML 5所包含的各项新技术.本书分为 14章.第 1~4章介绍了 HTML 5和浏览器的发展史. HTML 5新特性的使用,最新的前

演进架构中的领域驱动设计

from:http://www.infoq.com/cn/articles/ddd-evolving-architecture   领域驱动设计能非常容易地应用于稳定领域,其中的关键活动适合开发人员对用户脑海中的内容进行记录和建模.但在领域本身不断变化和发展的情况下,领域驱动 设计变得更具有挑战性.这在敏捷项目中很普遍,在业务本身试图演进的时候也会发生.本文分析了在反思.重建guardian.co.uk这一为期两年的计 划背景下我们是如何利用DDD的.我们展示了如何确保在软件架构中反映最终用户演

ASP.NET Core 一步步搭建个人网站(7)_Linux系统移植

摘要 考虑我们为什么要选择.NET Core? 因为它面向的是高性能服务器开发,抛却了 AspNet 的臃肿组件,非常轻量,加上微软的跨平台战略,对 Docker 的亲和性,对于开发人员也非常友好,所以整体环境来说是健康发展的,未来技术决策时 .Net Core 也有很大的优势.那既然.NET Core 本身具有跨平台 (Windows.Mac OSX.Linux) 特性,而之前我们的网站一直是部署在 Windows Server 服务器上,这个章节我们不妨学习在生产环境下,怎么将我们的网站应用

基于Android平台的i-jetty网站智能农业监控系统

基于android平台i-jetty网站的智能农业监控系统 摘要:传统的监控系统,一般是基于PC的有线通信传输,其有很多不足之处,如功耗较高.布线成本高.难度大,适应性差,可扩展性不强,增加新的通信线路需要再次布线施工,而且维护起来也比较麻烦,一旦线路出问题,需要繁琐的检查.而嵌入式Web监控系统是基于物联网技术,其无线通信技术具有成本低廉.适应性强.扩展性强.信息安全.使用维护简单等优点. 智能农业中,种植大棚是通过大棚内安装温湿度以及光照传感器,来对农作物的环境参数进行实时采集,由Web监控

Cocos移植到Android的一些问题-SQLite3数据库移植问题

首选我们讨论一下SQLite3数据库移植问题.我们在第14章节介绍了在Win32平台使用SQLite3数据库,我们介绍了两种配置环境的方法:一种是使用Cocos2d-x提供的SQLite3库配置,另一种是从SQLite官网下载源代码拷贝的工程中.第一种方法配置起来比较麻烦,关键是Cocos2d-x提供的SQLite3库只是Win32没有其它平台的,目录结构如下所示.<游戏工程目录>\cocos2d\external\sqlite3│  Android.mk│├─include│      sq