整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          PHP編程

          PHP編程

          HP 是一種創建動態交互性站點的強有力的服務器端腳本語言。

          PHP 是免費的,并且使用非常廣泛。同時,對于像微軟 ASP 這樣的競爭者來說,PHP 無疑是另一種高效率的選項。

          適用于PHP初學者的學習線路和建議

          PHP 開發工具推薦

          PHP 在線工具

          通過實例學習 PHP

          我們的 PHP 在線實例讓您能夠更簡單的學習 PHP,實例中包含了 PHP 的源碼及運行結果。

          實例

          <!DOCTYPE html>

          <html>

          <body>

          <?php

          echo "Hello World!";

          ?>

          </body>

          </html>

          運行實例 ?


          PHP 入門

          PHP 參考手冊

          PHP 函數的完整參考手冊:

          • Array 函數

          • Calendar 函數

          • cURL 函數

          • Date 函數

          • Directory 函數

          • Error 函數

          • Filesystem 函數

          • Filter 函數

          • FTP 函數

          • HTTP 函數

          • LibXML 函數

          • Mail 函數

          • Math 函數

          • Misc 函數

          • MySQLi 函數

          • SimpleXML 函數

          • String 函數

          • XML Parser 函數

          • Zip 函數

          、下載nginx和php的程序包

          1.NGINX官網下載

          2.PHP官網下載


          二、安裝和配置nginx和php

          1. 將nginx解壓到指定目錄下:

          a. 運行nginx根目錄下的nginx.exe

          b. 打開瀏覽器訪問本地IP,

          c. 看看是否出現“Welcome to nginx!”,出現的證明已經啟動成功了。

          d. 沒有啟動的話,看看80端口有占用沒。

          nginx命令:

          重新加載配置文件:nginx -s reload;

          退出:nginx -s stop;


          2. 將php和nginx解壓到指定目錄下

          a. php根目錄下的php.ini-recommended文件復制一份并改名為php.ini,用文本編輯器將它打開。(具體配置信息請參考文件php-示例.ini)

          i. 將 ;extension_dir="ext"改成extension_dir="./ext"

          注意去掉前面的”;“。

          ii. 將;cgi.force_redirect=1前面的”;“去掉。

          iii. 將;extension=php_curl.dll前面的”;“去掉。

          iv. 將;extension=php_gd2.dll前面的”;“去掉。

          v. 將;extension=php_mbstring.dll前面的”;“去掉。

          vi. 將;extension=php_mysqli.dll前面的”;“去掉。

          vii. 將;extension=php_openssl.dll前面的”;“去掉。

          viii. 將;extension=php_pdo_mysql.dll前面的”;“去掉。

          b. 在根目錄下新加文件php-cgi.vbs在里面填寫以下內容:

          set wscriptObj=CreateObject("Wscript.Shell")

          wscriptObj.run "php-cgi -b 127.0.0.1:9000",0

          雙擊php-cgi.vbs文件啟動php

          3. 在\nginx\html下新建一個phpinfo.php在里面填寫以下內容:

          <?php phpinfo(); ?>

          4. 訪問url/phpinfo.php

          5. 出現如下的信息就說明php已經成功安裝:


          三、部署項目

          1.打開/nginx/conf下的nginx.conf文件來配置nginx(具體配置信息請參考文件 nginx-示例.conf)

          注意:兩個server端口號一樣時需要另外配置域名;

          host文件地址:C:\Windows\System32\drivers\etc

          host文件中添加自己需要的域名


          希望我的分享可以幫助到你,如果你在內容技術上遇到難題,可以+關注■@主引教程 ,反饋給我們。我們會及時回復,如果有那些內容有誤可以直接提出來,我們會及時糾正,謝謝來訪。

          、PHP配置文件中和上傳文件有關的選項


          file_uploads=on 設置php腳本是否可以接受HTTP文件上傳


          memory_limit=8M 設置腳本可以分配的最大內存量, 防止失控的腳本獨占服務器內存

          upload_max_filesize=200M 限制php處理上傳文件大小的最大值, 此值必須小于post_max_size的值

          最大不要超過服務器的內存

          upload_tmp_dir=c:/uploads/ 上傳文件存放的臨時路徑(默認值:使用操作系統的臨時目錄), 該臨時文件的有效期就是腳本周期:

          post_max_size=250M 限制通過post方法可以接受信息的最大值

          此值除了包含上傳文件的大小, 還包含表單中的數據, 因此此值必須大于upload_max_filesize



          限制文件上傳的兩個參數:

          post_max_size=150M

          upload_max_filesize=100M

          post_max_size 必須大于 upload_max_filesize


          max_execution_time PHP執行的最大時間

          max_input_time php 解析post/get數據所用的最大時間


          如何獲取服務器能夠上傳的文件大小

          <?php
          function get_upload_max_size(){
          		return min(intval(get_cfg_var('upload_max_filesize')),intval(get_cfg_var('post_max_size')),intval(get_cfg_var('memory_limit')));
          }
          echo get_upload_max_size(); //3200M
          


          二、上傳表單需要的注意事項

          1. 如果有文件上傳操作表單的提交方法必須 HTTP post

          2. 表單上傳需要使用type為file的表

          3. enctype="multipart/form-data" 只有文件上傳時才使用這個值, 用來指定表單編碼的數據方式, 讓服務器知道, 我們要傳遞

          一個文件并帶有常規的表單信息。

          4. 建議添加一個 MAX_FILE_SIZE 隱藏表單, 值的單位也是字節

          <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />

          三、PHP處理上傳的數據

          $_POST 接收非上傳的數據

          如果是文件上傳的數據則使用 $_FILES處理上傳的文件

          <?php
          //step 1 使用$_FILES['pic']["error"] 檢查錯誤
          if($_FILES["pic"]["error"] > 0){
              switch($_FILES["pic"]["error"]) {
              case 1:
                  echo "上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值<br>";
                  break;
              case 2:
                  echo "上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值";
                  break;
              case 3:
                  echo "文件只有部分被上傳";
                  break;
              case 4:
                  echo "沒有文件被上傳";
                  break;
              default:
                  echo "末知錯誤";
              }
          
              exit;
          }
          
          $maxsize=5000000; //50k
          //step 2 使用$_FILES["pic"]["size"] 限制大小 單位字節 2M=2000000
          if($_FILES["pic"]["size"] > $maxsize ) {
              echo "上傳的文件太大,不能超過{$maxsize}字節";
              exit;
          }
          //step 3 使用$_FILES["pic"]["type"]或是文件的擴展名 限制類型 MIME image/gif image/png gif png jpg
          /* list($dl, $xl)=explode("/", $_FILES["pic"]["type"]);
          if($dl!="image"){
          echo "請上傳一個圖片,不充許其它類型文件";
          exit;
          }
          
          */
          //$hz=strrchr($_FILES["pic"]["type"], "."); 后綴名含有"."
          $allowtype=array("png", "gif", "jpg", "jpeg");
          $arr=explode(".", $_FILES["pic"]["name"]);
          $hz=$arr[count($arr)-1];
          if(!in_array($hz, $allowtype)){
              echo "這是不充許的類型";
              exit;
          }
          
          
          //step 4 將讓傳后的文件名改名
          
          $filepath="./uploads/"; //文件上傳不要采用根路徑 $filepath="/uploads/", 否則會報錯
          $randname=date("Y").date("m").date("d").date("H").date("i").date("s").rand(100, 999).".".$hz;
          //將臨時位置的文件移動到指定的目錄上即可
          if(is_uploaded_file($_FILES["pic"]["tmp_name"])){
              if(move_uploaded_file($_FILES["pic"]["tmp_name"], $filepath.$randname)){
                  echo "上傳成功";
              }else{
                  echo "上傳失敗";
              }
          }else{
          echo "不是一個上傳文件";
          }

          多文件上傳結構

          多個文件上傳后$_FILES 數組結構圖

          Array(
          [myfile]=>Array(
          [name]=>Array( //$_FILES["myfile"]["name"]存儲所有上傳文件的內容
          [0]=>Rav.ini //$_FILES["myfile"]["name"][0]第一個上傳文件的名稱
          [1]=>msgsocm.log //$_FILES["myfile"]["name"][1]第二個上傳文件的名稱
          [2]=>NOTEPAD.EXE) //$_FILES["myfile"]["name"][2]第三個上傳文件的名稱
          [type]=>Array( //$_FILES["myfile"]["type"]存儲所有上傳文件的類型
          [0]=>application/octet-stream //$_FILES["myfile"]["type"][0]第一個上傳文件的類型
          [1]=>application/octet-stream //$_FILES["myfile"]["type"][1]第二個上傳文件的類型
          [2]=>application/octet-stream) //$_FILES["myfile"]["type"][2]第三個上傳文件的類型
          [tmp_name]=>Array(
          [0]=>C:/WINDOWS/Temp/phpAF.tmp
          [1]=>C:/WINDOWS/Temp/phpB0.tmp
          [2]=>C:/WINDOWS/Temp/phpB1.tmp)
          [error]=>Array(
          [0]=>0
          [1]=>0
          [2]=>0)
          [size]=>Array(
          [0]=>64
          [1]=>1350
          [2]=>66560))
          )
          

          實例:

          <html>
          <head>
          <meta charset="utf-8">
          <title>index_uploads</title>
          </head>
          <body>
          <form action="uploads.php" method="post" enctype="multipart/form-data">
          <input type="file" name="file[]">
          <br>
          <input type="file" name="file[]">
          <br>
          <input type="submit" value="uploads">
          </form>
          </body>
          </html>
          <?php
          header("content-type:text/html;charset=utf-8");
          echo "<pre>";
          print_r($_FILES);
          echo "</pre>";
          
          $count=count($_FILES['file']['name']);
          
          for ($i=0; $i < $count; $i++) {
              $tmpfile=$_FILES['file']['tmp_name'][$i];
              $filefix=array_pop(explode(".", $_FILES['file']['name'][$i]));
              $dstfile="uploads/files/".time()."_".mt_rand().".".$filefix;
          
              if (move_uploaded_file($tmpfile, $dstfile)) {
                  echo "<script>alert('succeed!');window.location.href='index_uploads.php';</script>";
              } else {
                  echo "<script>alert('fail!');window.location.href='index_uploads.php';</script>";
              }
          }
          ?>
          

          相關函數

          is_uploaded_file() 判斷文件是否是通過 HTTP POST 上傳的

          bool is_uploaded_file ( string $filename )

          move_uploaded_file() 將上傳的文件移動到新位置

          bool move_uploaded_file ( string $filename , string $destination )

          $filename $_FILES["name"]["tmp_name"]

          $destination 移動文件到這個位置(包含文件的路徑和文件名)

          注意: 上傳文件的腳本的所有者一定要有"w"的權限;

          大文件上傳時延長上傳時間:

          @set_time_limit(0);

          新建表單

          <form action='deal.php' method='post' enctype='multipart/form-data'>
          選擇頭像:<input type='file' name='file' />
          <hr />
          <input type='submit' name='submit' value='上傳' />
          </form>

          deal.php

          <?php
          //1、設置響應頭信息
          header('Content-type:text/html; charset=utf-8');
          //2、獲取上傳文件信息
          if($_FILES['file']['size'] > 0) {
              $file=$_FILES['file']['name'];
              $filename=getRandName($file);
              //3、把臨時文件上傳到uploads文件夾下(move_uploaded_file函數)
              if(move_uploaded_file($_FILES['file']['tmp_name'],'uploads/'.$filename)) {
                  echo '上傳成功';
              } else {
                  echo '上傳失敗';
              }
          }
          //定義一個函數,用于獲取隨機文件
          function getRandName($file) {
              //定義一個變量,用于接收新名稱
              $newname=date('YmdHis');
              //定義一個字符串
              $str='abcdefghijklmnopqrstuvwxyz';
              //隨機取出其中6個字符
              for($i=0;$i<6;$i++) {
              $newname .=$str[mt_rand(0,strlen($str)-1)];
              }
              //返回生成后的新文件名稱
              return $newname . strrchr($file,'.');
          }
          ?>

          多維$_FILES['uploadFile']數組進行轉換

          foreach($_FILES['uploadFile'] as $k=>$v){
              foreach($v as $key=>$value){
                  if($key==$key){
                  $arr[$key][$k]=$value;
                  }
              }
          }
          echo "<pre>";
          print_r($arr);
          echo "</pre>";


          原數組的格式

          Array
          (
          [name]=> Array
          (
          [0]=> laravel框架.txt
          [1]=> ecshop分析.txt
          [2]=> 注釋.txt
          )
          [type]=> Array
          (
          [0]=> text/plain
          [1]=> text/plain
          [2]=> text/plain
          )
          [tmp_name]=> Array
          (
          [0]=> C:\Windows\php562C.tmp
          [1]=> C:\Windows\php562D.tmp
          [2]=> C:\Windows\php563E.tmp
          )
          [error]=> Array
          (
          [0]=> 0
          [1]=> 0
          [2]=> 0
          )
          [size]=> Array
          (
          [0]=> 12506
          [1]=> 138
          [2]=> 2094
          )
          )

          轉換后數組格式:


          主站蜘蛛池模板: 一区二区视频在线免费观看| 2018高清国产一区二区三区| 91视频国产一区| 国产乱人伦精品一区二区在线观看| 国产精品无码一区二区在线| 日本不卡一区二区三区| 一本岛一区在线观看不卡| 成人免费观看一区二区| 日韩人妻无码一区二区三区久久| 老湿机一区午夜精品免费福利| 欧美日韩综合一区二区三区| 激情内射亚洲一区二区三区| 激情内射日本一区二区三区| 国产在线不卡一区二区三区| 精品国产一区二区三区久久蜜臀 | 精品国产毛片一区二区无码| 日韩三级一区二区三区| 女女同性一区二区三区四区| 无码国产精品一区二区免费式影视 | 亚洲av无码一区二区三区天堂| 人妻久久久一区二区三区| 色噜噜狠狠一区二区三区果冻| 寂寞一区在线观看| 亚洲韩国精品无码一区二区三区| 夜夜添无码一区二区三区| 国产综合精品一区二区三区| 国产激情无码一区二区| 老熟妇仑乱视频一区二区 | 中文字幕日韩精品一区二区三区| 亚洲综合无码一区二区三区| 无码福利一区二区三区| 夜夜精品视频一区二区| 一区二区高清在线| 国产成人无码AV一区二区| 国产精品毛片VA一区二区三区 | 日韩视频在线观看一区二区| 国产成人高清精品一区二区三区 | 波多野结衣一区二区三区高清av | 国产伦精品一区二区三区精品 | 99精品国产高清一区二区三区 | 亚洲国产成人久久一区WWW|