现在服务器php环境都用什么搭建

现在服务器php环境都用什么搭建,第1张

现在使用第三方php面板搭建环境,然后上传建站程序,安装,域名解析到服务器ip上,去建站面板中添加域名,就可以通过域名访问网站了。

有了服务器和域名,第一步是做网站备案。

拿到备案号之后,才能开始建站过程。

云主机上面安装第三方一键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环境就此大功告成。

<?php

   class 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>

=====================================================================

以上是自己总结的  还没有怎么精简加工过,仅供参考

以上不止可以上传图片,可以上自定义任何文件


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/283107.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-22
下一篇2023-04-22

发表评论

登录后才能评论

评论列表(0条)

    保存