有了服务器和域名,第一步是做网站备案。
拿到备案号之后,才能开始建站过程。
云主机上面安装第三方一键php包的配置。好在国人也开发了这方面的面板,可以免费的使用。
借助这些 php面板,可以轻松配置php环境,mysql数据库,phpmyadmin、nginx等环境软件。
不管使用的是win服务器还是linux 服务器,都可以在三方面板的帮助下,成功配置出可视化操作界面,然后一键部署 worpdress环境。
有不懂的问我吧,在线留言。因为建站过程比较繁琐,这里图片也不支持那么多,到老魏那里搜索相关文章,记得是写过的,挺详细的。
现在很多站长PHP构建网站,因为PHP相对于其他的语言功能强大又简单易学,PHP具有非常强大的功能,所有的CGI的功能PHP都能实现,而且支持几乎所有流行的数据库以及操作系统。最大的原因可能是因为几乎所有用PHP编写的网站程序都开源,可以直接下载使用并修改,这给站长们特别是个人站长建设网站节约了很多的时间和精力。我们在用PHP建网站的时候,首先要面临的问题就是php环境搭建,今天笔者就跟大家分享一下如何在windows下配置搭建PHP开发环境,笔者主要讲的是搭建Apache+php开发环境。
配置搭建Apache+php环境的软件准备:
Apache官方下载地址:apache_2.0.55-win32-x86-no_ssl.msi
php官方下载地址:php-5.0.5-Win32.zip
一、安装Apache,配置成功一个普通网站服务器
运行下载好的“apache_2.0.55-win32-x86-no_ssl.msi”,
出现Apache HTTP Server 2.0.55的安装向导界面,点“Next”继续
确认同意软件安装使用许可条例,选择“I accept the terms in the license agreement”,点“Next”继续
将Apache安装到Windows上的使用须知,请阅读完毕后,按“Next”继续
设置系统信息,在Network Domain下填入您的域名(比如:qdsulian.com),在Server Name下填入您的服务器名称(比如:www.qdsulian.com,也就是主机名加上域名),在Administrator’s Email Address下填入系统管理员的联系电子邮件地址(比如:info@qdsulian.com),上述三条信息仅供参考,其中联系电子邮件地址会在当系统故障时提供给访问者,三条信息均可任意填写,无效的也行。下面有两个选择,图片上选择的是为系统所有用户安装,使用默认的80端口,并作为系统服务自动启动;另外一个是仅为当前用户安装,使用端口8080,手动启动。按“Next”继续。
选择安装类型,Typical为默认安装,Custom为用户自定义安装,我们这里选择Custom,有更多可选项。按“Next”继续
出现选择安装选项界面,如图所示,左键点选“Apache HTTP Server 2.0.55”,选择“This feature, and all subfeatures, will be installed on local hard drive.”,即“此部分,及下属子部分内容,全部安装在本地硬盘上”。点选“Change...”,手动指定安装目录。
我这里选择安装在“D:\”,各位自行选取了,一般建议不要安装在操作系统所在盘,免得操作系统坏了之后,还原操作把Apache配置文件也清除了。选“OK”继续。
返回刚才的界面,选“Next”继续。
确认安装选项无误,如果您认为要再检查一遍,可以点“Back”一步步返回检查。点“Install”开始按前面设定的安装选项安装。
正在安装界面,请耐心等待,直到出现下面的画面。
装向导成功完成,这时右下角状态栏应该出现了下面的这个绿色图标,表示Apache服务已经开始运行,按“Finish”结束Apache的软件安装
我们来熟悉一下这个图标,很方便的,在图标上左键单击,出现如下界面,有“Start(启动)”、“Stop(停止)”、“Restart(重启动)”三个选项,可以很方便的对安装的Apache服务器进行上述操作。
好了现在我们来测试一下按默认配置运行的网站界面,在IE地址栏打“http://127.0.0.1”,点“转到”,就可以看到如下页面,表示Apache服务器已安装成功。
现在开始配置Apache服务器,使它更好的替我们服务,事实上,如果不配置,你的安装目录下的Apache2\htdocs文件夹就是网站的默认根目录,在里面放入文件就可以了。这里我们还是要配置一下,有什么问题或修改,配置始终是要会的,如图所示,“开始”、“所有程序”、“Apache HTTP Server2.0.55”、“Configure Apache Server”、“Edit the Apache httpd conf Configuration file”,点击打开。
XP的记事本有了些小变化,很实用的一个功能就是可以看到文件内容的行、列位置,按下图所示,点“查看”,勾选“状态栏”,界面右下角就多了个标记,“Ln 78, Col 10”就表示“行 78,列 10”,这样可以迅速的在文件中定位,方便解说。当然,你也可以通过“编辑”,“查找”输入关键字来快速定位。每次配置文件的改变,保存后,必须在 Apache服务器重启动后生效,可以用前面讲的小图标方便的控制服务器随时“重启动”。
现在正式开始配置Apache服务器,“Ln 228”,或者查找关键字“DocumentRoot”(也就是网站根目录),找到如下图所示地方,然后将""内的地址改成你的网站根目录,地址格式请照图上的写,主要是一般文件地址的“\”在Apache里要改成“/”。
“Ln 253”,同样,你也可以通过查找“
“Ln321”,DirectoryIndex(目录索引,也就是在仅指定目录的情况下,默认显示的文件名),可以添加很多,系统会根据从左至右的顺序来优先显示,以单个半角空格隔开,比如有些网站的首页是index.htm,就在光标那里加上“index.htm ”文件名是任意的,不一定非得“index.html”,比如“test.php”等,都可以。
这里有一个选择配置选项,以前可能要配置,现在好像修正过来了,不用配置了,就是强制所有输出文件的语言编码,html文件里有语言标记(,这个就是设定文档语言为gb2312)的也会强制转换。如果打开的网页出现乱码,请先检查网页内有没有上述 html语言标记,如果没有,添加上去就能正常显示了。把“#DefaultLanguage nl”前面的“# ”去掉,把“nl”改成你要强制输出的语言,中文是“zh-cn”,保存,关闭。
简单的Apache配置就到此结束了,现在利用先前的小图标重启动,所有的配置就生效了,你的网站就成了一个网站服务器,如果你加载了防火墙,请打开80或8080端口,或者允许Apache程序访问网络,否则别人不能访问。
二、php的安装、以module方式,将php与apache结合使你的网站服务器支持php服务器脚本程序
将下载的php安装文件php-5.0.5-Win32.zip右键解压缩。
指定解压缩的位置,我的设定在“D:\php”
查看解压缩后的文件夹内容,找到“php.ini-dist”文件,将其重命名为“php.ini”,打开编辑,找到下面图中的地方, Ln385,有一个“register_globals = Off”值,这个值是用来打开全局变量的,比如表单送过来的值,如果这个值设为“Off”,就只能用“$_POST['变量名']、$_GET['变量名 ']”等来取得送过来的值,如果设为“On”,就可以直接使用“$变量名”来获取送过来的值,当然,设为“Off”就比较安全,不会让人轻易将网页间传送的数据截取。这个值是否改成“On”就看自己感觉了,是安全重要还是方便重要?
这里还有一个地方要编辑,功能就是使php能够直接调用其它模块,比如访问mysql,如下图所示,Ln563,选择要加载的模块,去掉前面的 “”,就表示要加载此模块了,加载的越多,占用的资源也就多一点,不过也多不到哪去,比如我要用mysql,就要把“extension= php_mysql.dll”前的“”去掉。所有的模块文件都放在php解压缩目录的“ext”之下,我这里的截图是把所有能加载的模块都加载上去了,前面的“”没去掉的,是因为“ext”目录下默认没有此模块,加载会提示找不到文件而出错。这里只是参考,一般不需要加载这么多,需要的加载上就可以了,编辑好后保存,关闭。
如果上一步加载了其它模块,就要指明模块的位置,否则重启Apache的时候会提示“找不到指定模块”的错误,这里介绍一种最简单的方法,直接将php安装路径、里面的ext路径指定到windows系统路径中——在“我的电脑”上右键,“属性”,选择“高级”标签,点选“环境变量”,在“系统变量”下找到“Path”变量,选择,双击或点击“编辑”,将“D:\phpD:\php\ext”加到原有值的后面,当然,其中的“D:\php” 是我的安装目录,你要将它改为自己的php安装目录,如下图所示,全部确定。系统路径添加好后要重启电脑才能生效,可以现在重启,也可以在所有软件安装或配置好后重启。
现在开始将php以module方式与Apache相结合,使php融入Apache,照先前的方法打开Apache的配置文件,Ln 173,找到这里,添加进如图所示选中的两行,第一行“LoadModule php5_module D:/php/php5apache2.dll”是指以module方式加载php,第二行“PHPIniDir "D:/php"”是指明php的配置文件php.ini的位置,是当然,其中的“D:/php”要改成你先前选择的php解压缩的目录。
还是Apache的配置文件,Ln 757,加入“AddType application/x-httpd-php .php”、“AddType application/x-httpd-php .html”两行,你也可以加入更多,实质就是添加可以执行php的文件类型,比如你再加上一行“AddType application/x-httpd-php .htm”,则.htm文件也可以执行php程序了,你甚至还可以添加上一行“AddType application/x-httpd-php .txt”,让普通的文本文件格式也能运行php程序。
前面所说的目录默认索引文件也可以改一下,因为现在加了php,有些文件就直接存为.php了,我们也可以把“index.php”设为默认索引文件,优先顺序就自己排了,我的是放在第一位。编辑完成,保存,关闭。
现在,php的安装,与Apache的结合已经全部完成,用屏幕右下角的小图标重启Apache,你的Apache服务器就支持了php。在windows下配置搭建Apache+php环境就此大功告成。
<?phpclass FileUpload{
private $filepath //指定上传文件保存的路径
private $allowtype=array("gif","jpg","jpeg","png")//允许上传文件的类型
private $maxsize=1000000//允许上传文件的最大值
private $israndname=true//是否随机重命名,
private $originName//源文件名字
private $tmpFileName//临时文件名字
private $fileType//上传后的文件类型,主要是文件后缀名
private $fileSize//文件尺寸
private $newFileName//新文件名字
private $errorName=0//错误号
private $errorMess=""//用来提供错误报告
//用于对上传文件初始化
//指定上传路径 2·允许的类型 3·限制大小 4·是否使用随机文件名称
//让用户可以不用换位置传参数,后面参数给值不用按照位置或者必须有值
function __construct($options=array()){
foreach($options as $key=>$val){
$key = strtolower($key)
//查看用户参数中的数组下标是否和成员属性名相同
//get_class_vars(get_class($this))得到类属性的数组
//如果$key下标不在这个类属性的数组中,则退出for循环
if (!in_array($key,get_class_vars(get_class($this)))){
continue
}
$this -> setOption($key,$val)
}
}
private function setOption($key,$val){
//让实例化后获取过来的数组下标 = 数组下标的值,这里即为构造函数初始化
//构造函数中调用,等于把所有属性初始化,将来可以直接访问
$this -> $key=$val
}
private function getError(){
$str="上传文件{$this->originName}时出错"
switch($this -> errorNum){
case 4: $str.="没有文件被上传"
break
case 3: $str.="文件只有部分上传"
break
case 2: $str.="上传文件超过了表单的值"
break
case 1: $str.="上传文件超过phpini的值"
break
case -1: $str.="未允许的类型"
break
case -2: $str.="文件过大上传文件不能超过{$this->maxsize}字节"
break
case -3: $str.="上传文件失败"
break
case -4: $str.="建立存放上传文件目录失效,请重新上传指定目录"
break
case -5: $str.="必须指定上传文件的路径"
break
default: $str.="未知错误"
}
return $str.'<br>'
}
//用来检查文件上传路径
private function checkFilePath(){
if(empty($this -> filepath)){
$this -> setOption("errorNum",-5)
return false
}
if(!file_exists($this -> filepath) || !is_writable($this -> filepath)){
if(!@mkdir($this -> filepath,0755)){
$this -> setOption("errorNum",-4)
return false
}
}
return true
}
//用来检查上传文件尺寸大小
private function checkFileSize(){
if($this -> fileSize > $this ->maxsize){
$this -> setOption("errorNum",-2)
return false
}else{
return true
}
}
//用来检查文件上传类型
private function checkFileType(){
if(in_array(strtolower($this->fileType),$this -> allowtype)){
return true
}else{
//如果$this->fileType这个类型 不在$this -> allowtype这个数组中,则把错误号变成-1
$this -> setOption("errorNum",-1)
return false
}
}
private function setNewFileName(){
if($this -> israndname){
$this -> setOption("newFileName",$this->preRandName())
}else{
$this -> setOption("newFileName",$this -> originName)
}
}
//用于检查文件随机文件名
private function preRandName(){
$fileName=date("Ymdhis").rand(100,999)
return $fileName.".".$this -> fileType
}
//用来上传一个文件
function uploadFile($fileField){
//检查文件路径
$return = true
if(!$this -> checkFilePath()){
$this -> errorMess=$this -> getError()
return false
}//获取文件信息
$name = $_FILES[$fileField]['name']
$tmp_name = $_FILES[$fileField]['tmp_name']
$size = $_FILES[$fileField]['size']
$error = $_FILES[$fileField]['error']
if(is_array($name)){//判断获取过来的文件名字是否为数组
$errors=array()//如果为数组则设置为一个数组错误号
for($i=0$i<count($name)$i++){
//循环每个文件即每个类属性赋值或者说初始化属性值 或者初始化构造函数
if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
if(!$this->checkFileSize() || !$this->checkFileType()){
//如果上面尺寸或者类型不对,则调用这个错误信息
$errors[$i]=$this->getError()
$return=false
}
}else{
//这里是
$error[]=$this->getError()
$return=false
}
if(!$return)
$this->setFiles()
}
if($return){
$fileNames=array()
for($i=0$i<count($name)$i++){
if($this->setFiles($name[$i],$tmp_name[$i],$size[$i],$error[$i])){
$this->setNewFileName()
if(!$this->copyFile()){
$errors=$this->getError()
$return=false
}else{
$fileNames[$i]=$this->newFileName
}
}
}
$this->newFileName=$fileNames
}
$this->errorMess=$errors
return $return
}else{
//看看$name,$tmp_name,$size,$error这些是否赋值成功 否则返回FALSE
if($this -> setFiles($name,$tmp_name,$size,$error)){
//看看文件大小尺寸是否匹配,不匹配返回FALSE
if($this -> checkFileSize() && $this -> checkFileType()){
//获取新文件名
$this->setNewFileName()
if($this->copyFile()){
return true
}else{
return false
}
}else{
$return=false
}
}else{
$return=false
}
if(!$return){
$this -> errorMess = $this ->getError()
return $return
}
}
}
function copyFile(){//将文件从临时目录拷贝到目标文件夹
if(!$this->errorNum){
//如果传递来的路径有斜杠,则删除斜杠再加上斜杠
//./upload+./
$filepath=rtrim($this->filepath,'/').'/'
//./upload+./+加上随机后的新文件名和后缀
//这里指创建一个新的$filepath.这个文件 像占位符但是为空的
$filepath.=$this->newFileName
//尝试着把临时文件$this->tmpFileName移动到$filepath下哪里覆盖原来的这个文件
if(@move_uploaded_file($this->tmpFileName,$filepath)){
return true
}else{
$this->setOption('errorNum',-3)
return false
}
}else{
return false
}
}
//这里是为了其他剩余的属性进行初始化操作!
private function setFiles($name="",$tmp_name="",$size=0,$error=0){
//这里给错误号赋值
$this -> setOption("errorNum",$error)
//如果这里有错误,直接返回错误
if ($error){
return false
}
$this -> setOption("originName",$name)//复制名字为源文件名
$this -> setOption("tmpFileName",$tmp_name)
$arrstr = explode(".",$name)//按点分割文件名,
//取分割后的字符串数组最后一个 并转换为小写,赋值为文件类型
$this -> setOption("fileType",strtolower($arrstr[count($arrstr)-1]))
$this -> setOption("fileSize",$size)
return true
}
//用来获取上传后的文件名
function getNewFileName(){
return $this -> newFileName
}
//上传失败,后则返回这个方法,就可以产看报告
function getErrorMsg(){
return $this -> errorMess
}
}
?>
============================调用====================================
<?php
require("FileUpload.class.php")
//这里实例化后赋值为数组,数组的下标要对应类中属性的值,否则不能传递值,可以不分先后但是必须一致
$up = new FileUpload(array('israndname'=>'true',"filepath"=>"./upload/",'allowtype'=>array('txt','doc','jpg','gif'),"maxsize"=>1000000))
echo '<pre>'
if($up -> uploadFile("pic")){
print_r($up -> getNewFileName())
} else{
print_r($up -> getErrorMsg())
}
echo '<pre>'
?>
-------------------HTML-------------------------
<html>
<head>
<meta http-quive="content-type" content="text/htmlcharset=utf-8" ></meta>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
shoppic:<input type="file" name="pic[]"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
<input type="submit" name="sub" value="添加商品">
</form>
</body>
</html>
-------------------或者HTML-------------------------
<html>
<head>
<meta http-quive="content-type" content="text/htmlcharset=utf-8" ></meta>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
//区别在这里
shoppic:<input type="file" name="pic[]"><br>
shoppic:<input type="file" name="pic[]"><br>
shoppic:<input type="file" name="pic[]"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">
<input type="submit" name="sub" value="添加商品">
</form>
</body>
</html>
=====================================================================
以上是自己总结的 还没有怎么精简加工过,仅供参考
以上不止可以上传图片,可以上自定义任何文件
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)