天之道

享受编程的乐趣。
posts - 118, comments - 7, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

删数问题

时间限制:1000 ms  |  内存限制:65535 KB
描述

           给出一个N位正整数(首位不为0),去掉其中S个数字后剩下的数字按左右次序组成一个新的N-S位正整数(首位不能为0)。对给定的NS,寻找一种删数规则使得剩下得数字组成的新数最小。

输入

         第一行一个正整数T ,表示有T组测试数据。

        对于每组测试数据:第一行两个正整数 n ,s (s<  n <= 10, 000) (用空格隔开); 第二行为一个n 位正整数。

输出

         对于每组测试数据输出一行:最小的新数。

样例输入
2 10 2 1234334789 11 3 90019008798 
样例输出
12333478 19008798

#include<stdio.h>
#include
<string.h>
int main()
{
    
int n,s,k,i,m;
    
char a[10000];
    scanf(
"%d",&n);
    
while(n--)
    {   
        i
=0;
        scanf(
"%d%d",&m,&s);
        scanf(
"%s",a);
        
while(s>0)
        {
            
while(i<strlen(a) && a[i]<=a[i+1&& a[i]!='0') i++;
            
for(k=i;k<strlen(a);k++)
            {
                a[k]
=a[k+1];
            }
            s
--;
        }
        printf(
"%s\n",a);
    }
    
return 0;

}

posted @ 2012-05-03 23:55 hoshelly 阅读(471) | 评论 (1)编辑 收藏


在php5.3.0后的版本,取消了对ereg函数的支持,惹得若干程序需要改动,譬如我安装的zen-card1.3.8,颇不方便。

错误:
Deprecated: Function ereg() is deprecated in ……

解决方法一:
退回去用php5.2。(众人皆赞道:果是好法子!)

解决方法二:
继续用php5.3,但是修改devel/devel.modul的460行:
if ($errno & (E_ALL & ~E_NOTICE & ~E_DEPRECATED)) {
把丫deprecated错误给忽略掉。(众人皆又赞道:果……果……果是好法子!)

解决方法三:
动程序鸟,把ereg换成preg_match,ereg_replace也需得换成preg_replace。只得注意的是
ereg(’^[0-9]‘    需修改成   preg_match(’/^[0-9]/‘
无敌//必须加,哈哈。(众人皆俯首赞道:王道也!)

来源:http://www.chineseinla.com/f/page_viewtopic/t_25780.html
 
 
 
 
 
====2===========================================================
 
信息提示是不推荐使用ereg_replace(),你加个@看能不能屏蔽掉,@ereg_replace(...)。
不行的话,改改咯。
1.define('DEDEADMIN', preg_replace("/[\/\\\\]{1,}/", '/', dirname(__FILE__) ) );
2.define('DEDEADMIN',strtr(dirname(__FILE__),'\\/','//'));
 
 

posted @ 2012-04-15 15:18 hoshelly 阅读(246) | 评论 (0)编辑 收藏

题目描述

用指针对于任意输入4个字符串进行相连组合,输入的四个字符串用空格分开,要求输出所有的两两相连结果。例如输入的4个字符串为a bc def ghij, 输出结果为:
a+a=aa
a+bc=abc
a+def=adef
a+ghij=aghij
bc+a=bca
... (以此类推)
ghij+def=ghijdef
ghij+ghij=ghijghij

要求不允许使用任何字符串库函数。

输入

输入四个任意的字符串,用空格分开

输出

输出所有的两两相连结果

样例输入

a bc def ghij

样例输出

a+a=aa
a+bc=abc
a+def=adef
a+ghij=aghij
bc+a=bca
bc+bc=bcbc
bc+def=bcdef
bc+ghij=bcghij
def+a=defa
def+bc=defbc
def+def=defdef
def+ghij=defghij
ghij+a=ghija
ghij+bc=ghijbc
ghij+def=ghijdef
ghij+ghij=ghijghij


代码如下:

#include<stdio.h>
int main()
{
    int i,j;
    char str[4][100];
    for(i=0;i<4;i++)
        scanf("%s",str[i]);
    for(i=0;i<4;i++)
        for(j=0;j<4;j++)
        {
            printf("%s+%s=%s%s\n",str[i],str[j],str[i],str[j]);
        
        }
    return 0;
}
   

posted @ 2012-04-11 23:20 hoshelly 阅读(207) | 评论 (0)编辑 收藏


首先安装jdk于C,安装后目录为:C:\Program Files\Java\jdk1.6.0,然后右键我的电脑,选择高级--->环境变量,配置如下:

JAVA_HOME=C:\Program Files\Java\jdk1.6.0;

path=%JAVA_HOME%\bin;

classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tool.jar;

点击确定完成。

 

HelloWorld.java经典测试代码:

public class HelloWorld{

public static void main(String args[]){

System.out.println("hello world !")

}

}

命令行输入:javac HelloWorld.java

生成HelloWorld.class

命令行输入:java HelloWorld

屏幕上打印"hello world !"

 

很多人在初学Java的时候经常会被书中介绍的一堆环境变量的设置搞得头昏脑胀,很多书中都会在初装JDK的时候让大家设置JAVA_HOME环境变量,在开发程序的时候设置CLASSPATH环境变量,而很多人并不理解这两个环境变量的作用,我们来分别进行详细的阐述。

首先是JAVA_HOME环境变量,我们先来掌握这个环境变量的设置内容,JAVA_HOME这个环境变量的设置内容是JDK的安装目录,比如说您的JDK安装在d:\jdk1.6.0这个目录下,请您查看一下这个目录下是不是有一个子目录bin,bin目录中是不是有java.exe这个文件,如果是,那么您的JAVA_HOME环境变量的内容应该为d:\jdk1.6.0。那么我们设置这个环境变量的作用是什么呢?就单独的java开发而言,这个环境变量并没有任何作用,这就是很多根据书上的描述设置好之后,把一本书学完也没有用到这个变量,所以很是不理解。

其实JAVA_HOME变量最好还是设置一下。首先,我们为了能够编译和运行java程序,需要在PATH环境变量中把java.exe所在的目录设置为PATH变量的一部分,目的是为了能够通过命令行运行javac和java命令成为可能,当你在命令行中输入javac ...或者java ...的时候,如果提示你一个错误:'javac' 不是内部命令或外部命令,也不是可运行的程序或批处理文件。这时候说明操作系统没有找到你通过命令行输入的javac这个命令,为什么呢?因为操作系统并 不知道你的javac.exe这个文件在哪里,所以无法执行对应的文件。那么为了能够让操作系统找到这个可执行文件,我们就需要把javac.exe这个可执行文件所在的目录作为PATH环境变量的一部分设置起来,这样当你在命令行输入一个命令的时候,操作系统就会自动搜索PATH变量中所指定的所有目录了。在Windows系统中PATH变量中的所有路径采用分号分割,如果在Linux系统中采用冒号分割。另外说明一点,如果你设置好了环境变量,在命令行中还是出现同样的错误,那么有两种可能,一种就是你的设置不正确,另一种就是你的设置没有生效,一般你可以关闭命令行窗口再重新打开就可以了。这对这个设置,以刚才的目录为例,那么PATH变量中的内容就是...;d:\jdk1.6.0\bin,这时候我们可以借用已经设定过的JAVA_HOME,将PATH的内容修改为:...;%JAVA_HOME%\bin,这样的设置有一定的好处,当你的系统中重新安装JDK,并改变过目录的话,你只要修改JAVA_HOME的内容就可以了,PATH则不需要修改。此外,JAVA_HOME变量还会有一些其他用途,比如Eclipse这个IDE,它本身是由java程序编写的,那么在运行的时候必然需要虚拟机的存在,所以Eclipse在启动时需要查找虚拟机,如果有JAVA_HOME这个变量,那么 Eclipse就会利用这个变量找到虚拟机的路径。所以虽然开始JAVA_HOME环境变量可以不设置,但是还是建议大家为以后考虑而设置上。

我们继续来谈论CLASSPATH的问题,很多书上在讲解java程序的时候建议大家设置CLASSPATH这个环境变量,我们这里不建议大家设置。原因我们会在稍后的时候看到。讲到CLASSPATH,我们首先来看编写java程序时一直在用的两个命令javac和java。

javac的命令语法是这样的:

javac <选项> <源文件>

我们常用的情况是这样的:

javac -classpath <类路径> <要编译的java源文件>

这里的类路径输入什么呢?这里的类路径是指要编译的java源文件中所用的非java的基础API中的类在那个目录下,路径可以是多个目录,用分号隔开 来。比如说我们要编译App.java这个文件,而这个文件中用到了com.util这个包中的MyDate这个类,现在我们假设MyDate这个类存在目录是:d:\mylib\com\util\MyDate.class,那么我们如何编译App这个类呢?我们的命令如下:

javac -classpath d:\mylib App.java

注意这里的classpath的内容,我们只是指定路径到package所在目录,并不能把package一起指定进去,而且MyDate.class必须在com\util这个目录中,因为这个类定义了package为com.util。好了现在你对javac中的classpath明白了吗?

我们再来看java这个命令,这个命令的语法是这样的:

java [选项] 类 [参数]

比如说以上面的例子,我们假设App这个类位于com.app这个package中,它的存放目录是:d:\dev\myapp\com\app\App.class,那么我们该如何运行这个类呢?命令如下:

java -classpath d:\dev\myapp;d:\mylib com.app.App

从命令中我们可以看到,在classpath后面我们指定两个目录,分别是App这个类的package所在的目录和MyDate这个类的package 所在的目录,这里的类路径要给定的是要运行的类和这个类用到的所有类的package所在的目录,多个目录之间用分号隔离开来,最后指定要运行的类的时候必须加上package。

好了到这里你应该彻底掌握了编译java程序和运行java程序的诀窍了吧。如果我们在系统环境变量中设置了CLASSPATH的话,在命令行中通过java运行的时候如果再不指定CLASSPATH参数,那么就会导致java虚拟机只是按照CLASSPATH环境变量中的目录搜索类,而不在你的当前目录下搜索类,结果自然会出现Exception in thread "main" java.lang.NoClassDefFoundError,所以当你看到这个错误的时候请查看一下你的系统环境变量,如果没有设置 CLASSPATH,那么在检查一下你的当前目录。为了确保万无一失,按照上面讲述的例子进行操作是不会发生任何错误。

posted @ 2012-03-31 23:31 hoshelly 阅读(205) | 评论 (0)编辑 收藏

cmd怎样像切换到C盘D盘一样, 切换到其子目录



比如要进入 d:\test\abc 那就 d:(回车) cd\(回车) cd test回车) cd abc(回车) ===== 或者 d:(回车) cd \test\abc(回车)

cmd命令大全:



有关某个命令的详细信息,请键入 HELP 命令名
ASSOC 显示或修改文件扩展名关联。
AT 计划在计算机上运行的命令和程序。
ATTRIB 显示或更改文件属性。
BREAK 设置或清除扩展式 CTRL+C 检查。
CACLS 显示或修改文件的访问控制列表(ACLs)。
CALL 从另一个批处理程序调用这一个。
CD 显示当前目录的名称或将其更改。
CHCP 显示或设置活动代码页数。
CHDIR 显示当前目录的名称或将其更改。
CHKDSK 检查磁盘并显示状态报告。
CHKNTFS 显示或修改启动时间磁盘检查。
CLS 清除屏幕。
CMD 打开另一个 Windows 命令解释程序窗口。
COLOR 设置默认控制台前景和背景颜色。
COMP 比较两个或两套文件的内容。
COMPACT 显示或更改 NTFS 分区上文件的压缩。
CONVERT 将 FAT 卷转换成 NTFS。您不能转换
当前驱动器。
COPY 将至少一个文件复制到另一个位置。
DATE 显示或设置日期。
DEL 删除至少一个文件。
DIR 显示一个目录中的文件和子目录。
DISKCOMP 比较两个软盘的内容。
DISKCOPY 将一个软盘的内容复制到另一个软盘。
DOSKEY 编辑命令行、调用 Windows 命令并创建宏。
ECHO 显示消息,或将命令回显打开或关上。
ENDLOCAL 结束批文件中环境更改的本地化。
ERASE 删除至少一个文件。
EXIT 退出 CMD.EXE 程序(命令解释程序)。
FC 比较两个或两套文件,并显示
不同处。
FIND 在文件中搜索文字字符串。
FINDSTR 在文件中搜索字符串。
FOR 为一套文件中的每个文件运行一个指定的命令。
FORMAT 格式化磁盘,以便跟 Windows 使用。
FTYPE 显示或修改用于文件扩展名关联的文件类型。
GOTO 将 Windows 命令解释程序指向批处理程序
中某个标明的行。
GRAFTABL 启用 Windows 来以图像模式显示
扩展字符集。
HELP 提供 Windows 命令的帮助信息。
IF 执行批处理程序中的条件性处理。
LABEL 创建、更改或删除磁盘的卷标。
MD 创建目录。
MKDIR 创建目录。
MODE 配置系统设备。
MORE 一次显示一个结果屏幕。
MOVE 将文件从一个目录移到另一个目录。
PATH 显示或设置可执行文件的搜索路径。
PAUSE 暂停批文件的处理并显示消息。
POPD 还原 PUSHD 保存的当前目录的上一个值。
PRINT 打印文本文件。
PROMPT 更改 Windows 命令提示符。
PUSHD 保存当前目录,然后对其进行更改。
RD 删除目录。
RECOVER 从有问题的磁盘恢复可读信息。
REM 记录批文件或 CONFIG.SYS 中的注释。
REN 重命名文件。
RENAME 重命名文件。
REPLACE 替换文件。
RMDIR 删除目录。
SET 显示、设置或删除 Windows 环境变量。
SETLOCAL 开始批文件中环境更改的本地化。
SHIFT 更换批文件中可替换参数的位置。
SORT 对输入进行分类。
START 启动另一个窗口来运行指定的程序或命令。
SUBST 将路径跟一个驱动器号关联。
TIME 显示或设置系统时间。
TITLE 设置 CMD.EXE 会话的窗口标题。
TREE 以图形模式显示驱动器或路径的目录结构。
TYPE 显示文本文件的内容。
VER 显示 Windows 版本。
VERIFY 告诉 Windows 是否验证文件是否已正确
写入磁盘。
VOL 显示磁盘卷标和序列号。
XCOPY 复制文件和目录树。


appwiz.cpl------------添加删除程序

control userpasswords2--------用户帐户设置

cleanmgr-------垃圾整理

CMD--------------命令提示符可以当作是 Windows 的一个附件,Ping,Convert 这些不能在图形环境下 使用的功能要借助它来完成。

cmd------jview察看Java虚拟机版本。


command.com------ 调用的则是系统内置的 NTVDM,一个 DOS虚拟机。它完全是一个类似 Virtual PC 的 虚拟环境,和系统本身联系不大。当我们在命令提示符下运行 DOS 程序时,实际上也 是自动转移到 NTVDM虚拟机下,和 CMD 本身没什么关系。


calc-----------启动计算器

chkdsk.exe-----Chkdsk磁盘检查

compmgmt.msc---计算机管理

conf-----------启动 netmeeting

control userpasswords2-----User Account 权限设置

devmgmt.msc--- 设备管理器

diskmgmt.msc---磁盘管理实用程序

dfrg.msc-------磁盘碎片整理程序

drwtsn32------ 系统医生

dvdplay--------启动Media Player

dxdiag-----------DirectX Diagnostic Tool

gpedit.msc-------组策略编辑器

gpupdate /target:computer /force 强制刷新组策略

eventvwr.exe-----事件查看器

explorer-------打开资源管理器

logoff---------注销命令

lusrmgr.msc----本机用户和组

msinfo32---------系统信息

msconfig---------系统配置实用程序

net start (servicename)----启动该服务

net stop (servicename)-----停止该服务

notepad--------打开记事本

nusrmgr.cpl-------同control userpasswords,打开用户帐户控制面板

Nslookup-------IP地址侦测器

oobe/msoobe /a----检查XP是否激活

perfmon.msc----计算机性能监测程序

progman--------程序管理器

regedit----------注册表编辑器

regedt32-------注册表编辑器

regsvr32 /u *.dll----停止dll文件运行

route print------查看路由表

rononce -p ----15秒关机

rsop.msc-------组策略结果集

rundll32.exe rundll32.exe %Systemroot%System32shimgvw.dll,ImageView_Fullscreen----启动一个空白的Windows 图片和传真查看器

secpol.msc--------本地安全策略

services.msc---本地服务设置

sfc /scannow-----启动系统文件检查器

sndrec32-------录音机

taskmgr-----任务管理器(适用于2000/xp/2003)

tsshutdn-------60秒倒计时关机命令

winchat--------XP自带局域网聊天

winmsd---------系统信息

winver-----显示About Windows 窗口

wupdmgr-----------Windows Update

posted @ 2012-03-31 20:36 hoshelly 阅读(238) | 评论 (0)编辑 收藏

Description

在一个二维矩阵中,如果某个位置的数值是该行最大值,同时也是该列最小值,我们则称该位置是矩阵的鞍点。鞍点在工业控制,建筑力学等方面有着广泛应用。鞍点可能有多个,也可能没有。

请编写程序找出矩阵的鞍点。

Input

第一行输入T表示有T个测试实例

第二行输入两个参数A和B,分别表示矩阵的行数和列数

第三行输入二维矩阵的数据,假定数据都是正整数

以此类推输入下个实例

Output

输出鞍点所在的行号和列号,行号和列号都是从0开始编号。

如果存在多个鞍点,输出行号和列号最小的鞍点。如果不存在鞍点,输出-1 -1

Sample Input

2
3 3
11 77 33
44 66 55
22 88 99
4 2
22 11
33 44
55 66
11 88

Sample Output

 1  1
-1 -1

#include<iostream>
using namespace std;
int main()
{
    
int n,max,i,j,k,flag,row_i,row_j;
    
int a[100][100];
    cin
>>n;
    
while(n--)
    {
        cin
>>row_i>>row_j;
        
for(i=0;i<row_i;i++)
        {
            
for(j=0;j<row_j;j++)
            {
                cin
>>a[i][j];
            }
        }

        
for(i=0;i<row_i;i++)
        {
            max
=0;
            flag
=1;
            
for(j=0;j<row_j;j++)
            {
                
if(a[i][j]>a[i][max])
                    max
=j;
            }
            
for(k=0;k<row_j;k++)
            {
                
if(a[i][k]==a[i][max] && max!=k)
                {
                    flag
=0;
                    
break;
                }
            }
            
if(flag==1)
            {
            
for(k=0;k<row_i;k++)
            {
                
if(a[k][max]<=a[i][max] && k!=i)
                {
                    flag
=0;
                    
break;
                }
            }
            }
             
if(flag==1)
            {
                cout
<<i<<" "<<max<<endl;
                
break;
            }
    
        }
        
if(flag==0)
        {
            cout
<<"-1"<<" "<<"-1"<<endl;
        }
    }
    
return 0;
}

posted @ 2012-03-15 09:39 hoshelly 阅读(715) | 评论 (0)编辑 收藏

创建一个后缀名为txt的文件,并向该文件写入一个字符串,保存起来,再打开文件,读出文件中的内容。
代码如下:
#include<stdio.h>
#include
<string.h>
int main()
{
    FILE 
*fp;
    
char pathName[20],txt1[100]={'\0'},txt2[20]={'\0'};
    
int fileLen;
    printf(
"Please type the path name of the file\n");
    scanf(
"%s",pathName);
    fp
=fopen(pathName,"w");
    printf(
"Please input a string to this file\n");
    scanf(
"%s",txt1);
    fileLen
=strlen(txt1);
    fwrite(txt1,fileLen,
1,fp);
    fclose(fp);
    printf(
"The file has been saved\n");
    printf(
"The content of teh file: %s is\n",pathName);
    fp
=fopen(pathName,"r");
    fread(txt2,fileLen,
1,fp);
    printf(
"%s\n",txt2);
    
return 0;
}


posted @ 2012-03-12 16:53 hoshelly 阅读(165) | 评论 (0)编辑 收藏

题目:
有一批集装箱要装入一个载质量为C的货船中,每个集装箱的质量由用户自己输入指定,在货船的装载体积不限的前提下,如何装载集装箱才能尽可能多地的将集装箱装入货船中。

每次选取质量最小的箱子装入船(用冒泡排序算法解决),代码如下:
#include<stdio.h>
#include
<stdlib.h>
void sort(int w[],int t[],int n)//w[]存放每个集装箱的质量,t[]存放w[]的下标
{
    
int i,j,tmp;
    
int *w_tmp=(int *)malloc(sizeof(int)*n);//开辟一个临时数组,存放w[]的内容,用于排序
    for(i=0;i<n;i++)
        t[i]
=i;//初始化数组t
    for(i=0;i<n;i++)
        w_tmp[i]
=w[i];
    
for(i=0;i<n-1;i++)
        
for(j=0;j<n-i-1;j++)//冒泡排序实现
            if(w_tmp[j]>w_tmp[j+1])
            
{
                tmp
=w_tmp[j];
                w_tmp[j]
=w_tmp[j+1];
                w_tmp[j
+1]=tmp;
                tmp
=t[j];
                t[j]
=t[j+1];
                t[j
+1]=tmp;
            }

}


void loading(int x[],int w[],int c,int n)
{
    
int i,s=0;
    
int *t=(int*)malloc(sizeof(int)*n);//动态开辟一个临时数组,存放w[]的下标
    sort(w,t,n);
    
for(i=0;i<n;i++)
        x[i]
=0;
    
for(i=0;i<&& w[t[i]]<=c;i++){
        x[t[i]]
=1//将第t[i]个集装箱装入货船中
        c=c-w[t[i]]; //变量c中存放货船的剩余载质量
    }

}


int main()
{
    
int x[5],w[5],c,i;
    printf(
"Iput the maximum loading of the sheep\n");
    scanf(
"%d",&c);
    printf(
"Iput the weight of Five box\n");
    
for(i=0;i<5;i++)
        scanf(
"%d",&w[i]);
    loading(x,w,c,
5);
    printf(
"The following boxes will be loaded\n");
    
for(i=0;i<5;i++)
    
{
        
if(x[i]==1)   printf("BOX:%d ",i);
    }

    
return 0;
}



posted @ 2012-03-12 14:10 hoshelly 阅读(638) | 评论 (0)编辑 收藏

<html>
<body>
<?php
$file
=fopen("welcome.txt","r") or exit("Unable to open file!");//open "welcom.txt"file, 只读方式
while(!feof($file))//当还未达到文件的末端(EOF)时
{
echo fgets($file).
"<br/>";//从文件中逐行读取文件
}
if(feof($file)) echo "End of file";
fclose($file);
//关闭文件

?>
</body>
</html>

//-----------------------------------------------------------------------------------------------------------------------------------------------------
fopen只是“打开”一个文件,并保存为一个资源变量。 这个资源变量里面并不包括文件的内容。 如果只是想显示文件内容,可用下面的语句: require_once "welcome.txt";
另外还有一个函数:
fgetc() 函数:用于从文件逐字符地读取文件。 注释:在调用该函数之后,文件指针会移动到下一个字符。

posted @ 2012-03-08 22:48 hoshelly 阅读(165) | 评论 (0)编辑 收藏

点此下载此教程最新版本

前言

  一直在网上逛,对PHP也有了所谓的了解。感慨于菜鸟入门时的艰辛(想偶当初光自己安装就花了2个星期),特写下此教程一篇,不敢托大,若能有所帮助则甚感欣慰。不当、不详及不解之处万望指正!

  补充:为了日后更新方便,此次安装方式和原来的常规方式略有不同,不必进行移动DLL文件等操作,请特别注意。

  几句废话:关于PHP的介绍自不必多叙,相信各位已从各方面或多或少得知。网上也有很多的安装教程,但不是 太旧不能顺应发展变化,就是错误连连,让新手无所适从。有朋友认为PHP的重点在编程上,服务器的配置可免则免,于是使用类似phptriad之类的合成 软件或者JAVA做的安装程序等。 这固然节省了一部分时间,但是错过了入门的必要步骤,我认为对您今后的学习还是不利的。如果有时间和毅力,不妨往下继续看。何况今天的这种安装方式,在您 重装系统后亦可在2分钟内重新完成PHP的安装配置。

准备工作

安装平台
Win2003 Enterprise Server + IE 6.0.3790.0

   注:
除win9x外,高版本windows下此配置方法应该均无问题(但没有时间一个个测试,有问题可以联系我)。

使用软件及版本
PHP4.3.4
Apache2.0.48
MYSQL4.0.17
Phpmyadmin2.5.6
ZendOptimizer2.1.0b

  注:以上软件均为Windows下的最新稳定版本。当您看到这篇教程时,也许各软件版本早已更新,请自行调整测试。

正式开始

  推荐更改以下所有软件的默认安装路径,不要放在系统盘,理由在后面。此处我将安装主目录设在 G:\phpinstall\ ,本文下面的路径也请改为相应路径。

安装MYSQL数据库

  这个比较简单。将下载好的ZIP文件解压缩,直接点一下里头的setup.exe,一路NEXT即可(本人安装路径:G:\phpinstall\mysql)。
  然后请打开“我的电脑”,运行一下“C:\mysql\bin\winmysqladmin.exe”,初次运行可能会遇见如下界面,这个是让你填写MYSQL默认的用户名和密码,请按要求填写(以后还可以修改)。接下来点击“OK”之后可能会发现它不见了,别急,看看你的任务栏右下角,在这里呢! 那个可爱的红绿灯,看见了没有?如果显示是绿灯,恭喜你,MYSQL服务已经启动。如果是黄灯,请稍候一下。如果是红灯,也请别急,右击那个图标,然后点 “WINNT==>Start the Server Standalone”,如果那个选项呈现灰色,请点“Start the Service”。其目的是重新启动MYSQL服务。
   许多教程里谈到用运行命令(cmd)来启动,放着这么好的工具不用,其实何必呢?
   继续,右击,我们点“Show me”,然后出现了它的运行界面。点倒数第2个"Databases",查看默认数据库是否已经存在(test及mysql),否则请仔细查看前面的过程,必要时重新安装。
   而左边第2项“Start Check”可以在您重新启动系统(比较直接和偷懒的方法)或者重新启动MYSQL服务(参见上述红灯情况部分)后用来判断是否正常。一般来说如下提示说明是正确的(均为OK)。否则也请自行重新启动系统或服务。
   如果还不放心,试试这样:运行“G:\phpinstall\mysql\bin\mysql.exe -u root -p”,正常的话应该出现一个类似DOS的窗口(如果出现让您输入密码的窗口,直接回车即可,因为mysql初始安装root密码默认为空;如果是覆盖安 装MYSQL的话请输入原来的那个root密码)。然后输入“show databases;”(别忘了分号),接下来如果出现两个数据库名称(mysql和test),那现在已经可以很肯定的说,您的MYSQL已经完全配置 好了 :) 看看效果

安装Apache服务器

  其实安装的过程很简单,也是类似的一路“NEXT”就行了,这里就说明两点:
  ①中间会出现一个界面,别怕,按如下窗口的提示写即可,何况我们以后还可以修改这些信息。
  ②如果您要更改默认安装路径,注意Apache2.x会自动在路径后面再加上一个"Apache2"文件夹。例如我把它安装在“G:\phpinstall\Apache2\”下,中间更改路径时只需要填写或选择"G:\phpinstall\"即可,如图
  安装完了,你会发现右下角多了这么一个图标,双击,发现这个界面.这是Apache2新增的一个非常实用的工具,在这里可以方便的控制Apache服务的开启、关闭、重启等操作,留给大家自行研究吧。
  现在请打开IE浏览器,在地址栏中敲入“http://127.0.0.1”,出现以下界面者,说明Apache的默认安装是成功的。

PHP的安装

  将下载得到的PHP-4.3.4-win32.zip解压缩到“G:\phpinstall\php”,请确保下面没有类似“php- 4.3.4-win32”这样的子文件夹,即压缩包内所有的文件已经直接放到了PHP的安装文件夹(“G:\phpinstall\php”)下。
  说到这里,不得不提一下PHP的两种安装方式。一种是CGI的安装方式,另一种是模块(modules)安装方式,一般推荐后面一种,因为其扩充性比较好。下面就按照这种思路安装。
  请将“G:\phpinstall\php\php4ts.dll”移入“G:\phpinstall\php\sapi”。最后将“G:\phpinstall\php\php.ini-dist”改名为“php.ini”后移到 Apache2 的安装目录“G:\phpinstall\Apache2”下(注意:移到系统目录例如 C:\WINNT亦可,但这样重装系统后你又得重新配置PHP,这种移到Apache2目录的方法可以省去该麻烦)。
  最后,在 G:\phpinstall\php 下新建两个子目录“session”和“includes”(理由?呵呵,别急,下面会说明)
  好了,PHP的安装就这么简单,是不是有点不可思议?

Apache及PHP的配置(重点)

  配置PHP的一些属性

  打开“G:\phpinstall\Apache2\php.ini”,搜索“doc_root”,“=”后面默认应该为空,你可以将它改为自 己的WWW网页的默认位置,例如本人的机器上就是改为“doc_root = f:/www”(请使用斜杠"/"而非反斜杠"\")。
  继续搜 索“extension_dir”,会得到“extension_dir = ./”一行,将它改为“extension_dir = G:/phpinstall/php/extensions”。然后搜索“;extension=”,会得到一大传类似的连续行。这些是PHP的扩展模 块,可以根据需要使用,对需要加入的模块只需要去掉前面的分号即可。例如,“extension=php_gd.dll”、 “extension=php_imap.dll”、“extension=php_zip.dll”等。
   搜索一下“session.save_path”,找到“session.save_path = /tmp”一行,将后面的地址改为你自己机器上已经存在的目录(这就是刚才建子目录的用处,你不会想每次装了PHP后都重新建一次吧?),这里使用 “G:\phpinstall\php\session”目录,然后将这一行改为“session.save_path = G:/phpinstall/php/session”(Again,还是斜杠)。这个问题在很多教程中都没有提到,而且一般SESSION在身份验证、 购物车等时候才需要,所以初学者容易忽视。
  好了,保存一下,PHP的配置暂告一段落。

  配置Web服务器Apache

  依次展开“开始菜单==>程序==>Apache HTTP Server 2.0.48==>Configure Apache Server==>Edit the Apache httpd.conf Configuration File”,打开Apache的配置文件“httpd.conf”。
  搜索“#Listen”,找到“#Listen 12.34.56.78:80”一行,如果想让Apache2只监听某一该IP段,这里就需要去掉注释,改成你需要的IP地址。例如,你只需要本机调试,不想让外部访问,那就改成 “Listen 127.0.0.1:80”,这样一来,只能从你本机访问(地址栏输入 127.0.0.1 或者 localhost)才能看到Apache2的页面。或者当你网卡绑定了两个以上的IPe而只想用其中某一个时也可以考虑用这个方法。一般而言不必对此做太多修改。
   接下来搜索“#LoadModule”,又找到一大串连续的行。这些是Apache2为了解释特定的语言而引入的模块。请在后面加入新的一 行:“LoadModule php4_module G:/phpinstall/php/sapi/php4apache2.dll”以使Apache2加入对PHP的支持。
  然后在这一行的后面再加上(其实加在哪里都一样,这样只是为了便于以后纠错):
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php .php4
    AddType application/x-httpd-php .php3
    AddType application/x-httpd-php .phtml
    AddType application/x-httpd-php-source .phps
  上述几行的用处是添加Apache支持和解释的PHP后缀名。您一定可以想到,如果加入“AddType application/x-httpd-php .html”一行,那么直接把PHP文件存为html格式也不要紧,你的Apache还是会自己解释的。
   (如果使用的是Apache1.x版本,还需做以下操作:搜索“AddModule”,还是找到一大串的连续行。在最后一行的下面加上“AddModule mod_php4.c”一行。本文使用的是2.x系列,所以毋需此步骤。
   最后需要更改的是默认WWW文件夹。搜索“DocumentRoot”,找到类似“DocumentRoot "G:/phpinstall/Apache2/htdocs" ”一行(随Apache2安装路径而改变)。将它改为“DocumentRoot "f:/www" ”(记得上面PHP的配置吗?对,同一个地方)。然后千万不能忘了一点,就是还要改一处地方,就是在你刚找到“DocumentRoot”下面不远的地方 (或者直接搜索“# This should be changed to whatever you set DocumentRoot to”就可以发现它的所在),将“<Directory "G:/phpinstall/Apache2/htdocs">”一行改为“<Directory "f:/www">”。
   如果需要增加虚拟目录,请添加类似“ Alias /manual "G:/phpinstall/Apache2/htdocs/manual/" ”的行。其中“Alians”后面的那个斜杠后面对应的是虚拟目录名,后面的是它的物理路径。上面的地址就可以通过“http://127.0.0.1 /manual”来访问。

  更改环境变量

  由于PHP在windows下运行时需要一些额外的DLL,所以需要用到“G:\phpinstall\php\dlls”下的那些文件。常规 方法是将这些文件放到“C:\WINDOWS\system32”下,但这样一来每次重新装都要如此,所以我使用环境变量来避免此问题。桌面右击“我的电 脑”==>“属性”==>“高级”==>“环境变量”==>“系统变量”==>找到“Path”一行,双击,在后面添加上 述目录,注意记得在原先的环境变量后面加上分号以区分(即需要输入“;G:\phpinstall\php\dlls”)

  好了,三大难点基本上搞定。为了能让您有所参照,特地将自己的配置文件放了上来,以供参考。点此下载  

程序调试阶段

  这里要提醒一点,对Apache或PHP的设置做了更改后,需要重启Apache以使其生效(以后类似,请自行注意)。具体如下:

  开始菜单=>程序=>Apache HTTP Server 2.0.48=>Control Apache Server=>Restart=> OK

  如果在这中间出现什么问题的话,请根据提示来检查。现在,我们来测试一下自己的安装成果。

  在“F:\www”新建一个文本文件,输入以下内容:
     <?php
     phpinfo();
     ?>
  然后将它更名为“phpinfo.php”,保存。打开IE浏览器,运行“http://127.0.0.1/phpinfo.php”,如果出现类似这样的网页内容,恭喜,PHP已经基本上安装好了。

  接下来要测试的是与MYSQL数据库的连接。
   把下载得到的“phpMyAdmin-2.5.4-php.zip”解压缩到“F:/www/phpmyadmin/”下,然后编辑 config.inc.php文件,搜索“$cfg['PmaAbsoluteUri']”一行,后面对应的是phpmyadmin的虚拟路径,这里我们 把它改为“$cfg['PmaAbsoluteUri'] = 'http://localhost/phpmyadmin/';”。
  继续往 下,搜索“$cfg['Servers'][$i]['auth_type']”这一行,这个是phpmyadmin的身份验证配置方式。这里我们选择 “$cfg['Servers'][$i]['auth_type'] = 'config';”,下面两行就是mysql的用户名和密码。默认的用户名是“root”,密码为空,别怕,我们呆会儿可以利用phpmyadmin修 改它。
  还是搜索,搜“$cfg['DefaultLang'] =”一行后面是它默认的语言,这里我们将它改为“$cfg['DefaultLang'] = 'zh';”,顺便把下面10行左右的默认字符集“$cfg['DefaultCharset'] =”改为“$cfg['DefaultCharset'] = 'gb2312';”。
  在浏览器中输入“http://127.0.0.1/phpmyadmin”,如果出现的界面如下,说明mysql已经连接成功了。phpmyadmin的其他功能就靠自己去摸索和实践了。

添加Zend引擎

  这个是所有安装中最简单的一步了。直接点下载得到的那个“ZendOptimizer-2.1.0b-Windows-i386.exe”。因 为我们的php.ini文件不在默认位置,中间需要指明它的位置(G:\phpinstall\Apache2)。它会自动备份原来的php.ini文件 为php.ini.optimizer-bak,安装后需要重新启动系统才能生效。重启后请再次运行“http://127.0.0.1 /phpinfo.php”,看是否在其中出现如图的画面(往下拉,在中间部位),没有的话,可要好好查查了。相信这个难不倒你,我就不多罗嗦了。成功后Apache就可以顺利解释有些用Zend加过密的PHP文件了。

重要说明

  此次安装与以往不同之处就在于php.ini的放置位置及dll文件的处理,因此,当您需要更新PHP版本时:请将新版本的PHP安装文件放到以前的目录并覆盖旧文件(参考上述 PHP的安装 部分,需要移动一个文件),而php.ini也需要重新编辑设定并移入Apache2安装目录(原来的php.ini文件设定可以参考,但不能继续使用,否则可能会导致未知问题) ;或者重新安装了系统后: 只要原来安装目录(G:\phpinstall)下的文件没有改变,则只需覆盖安装MYSQL、Apache(过程参考上述步骤,安装路径要选择原来 的),原来的配置和数据均不会被替换。然后重新设定一下PHP中DLL的环境变量即告成功!这也就是为何不要安装在系统盘的原因所在。

FAQ

Q1出现图中这个错误是什么意思?
A1:意思很明显了,没有任何安装的Apache2服务。要么您的系统是win9x,要么就是前面Apache2的安装过程出了一点小小的问题,请重新安装试试。

Q1我提交表单的时候不会自动生成变量?
A1:PHP4从4.2.0版本起,全局变量自动关闭。对于表单提交过来的变量,需要用特定的函数接受,具体如:

  $a=$_GET['var'];
  $b=$_POST['var'];

如果需要自动生成变量,可以打开php.ini,找到 register_globals = Off 一行,改成 register_globals = On ,然后重启Apache就可以了,但是从安全角度考虑,不推荐。

一些编后感想

  其实PHP的安装也不是很难,关键是要有耐心。而php.ini和httpd.conf这两个关键的配置文件我也没有全部谈到。有些地方还是需 要自己去慢慢揣测和琢磨了。中间安装过程也可能和我说的不完全一致,就要自己细心钻研。怎么说呢,时间的付出和获得的回报应该是成正比例的。相信各位也应 该会明白这个道理。

  事隔一年,更新此文,竟产生些许感触。

  好了,开始您的PHP编程之旅吧,祝您好运!

又及:在别人进入PHP世界初期需要帮忙的时候,请不吝伸出你的双手帮助他们,谢谢。

posted @ 2012-03-05 18:23 hoshelly 阅读(111) | 评论 (0)编辑 收藏

仅列出标题
共12页: First 4 5 6 7 8 9 10 11 12