整合營銷服務商

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

          免費咨詢熱線:

          2020年最新的PHP面試題(附答案)

          2020年最新的PHP面試題(附答案)

          . 什么是面向對象?主要特征是什么?

          面向對象是程序的一種設計方式,它利于提高程序的重用性,使程序結構更加清晰。主要特征:封裝、繼承、多態。

          2. SESSION 與 COOKIE的區別是什么,請從協議,產生的原因與作用說明?

          1、http無狀態協議,不能區分用戶是否是從同一個網站上來的,同一個用戶請求不同的頁面不能看做是同一個用戶。

          2、SESSION存儲在服務器端,COOKIE保存在客戶端。Session比較安全,cookie用某些手段可以修改,不安全。Session依賴于cookie進行傳遞。

          禁用cookie后,session不能正常使用。Session的缺點:保存在服務器端,每次讀取都從服務器進行讀取,對服務器有資源消耗。Session保存在服務器端的文件或數據庫中,默認保存在文件中,文件路徑由php配置文件的session.save_path指定。Session文件是公有的。

          3. HTTP 狀態中302、403、 500代碼含義?

          一二三四五原則: 一. 消息系列 二 成功系列 三. 重定向系列 四. 請求錯誤系列 五. 服務器端錯誤系列

          302:臨時轉移成功,請求的內容已轉移到新位置 403:禁止訪問 500:服務器內部錯誤 401代表未授權。

          4. Linux 下建立壓縮包,解壓縮包的命令

          Tar.gz:

          打包: tar czf file.tar.gz file.txt

          解壓: tar xzf file.tar.gz

          Bz2:

          打包: bzip2 [-k] 文件

          解壓: bunzip2 [-k] 文件

          Gzip(只對文件,不保留原文件)

          打包: gzip file1.txt

          解壓: gunzip file1.txt.gz

          Zip: -r 對目錄

          打包: zip file1.zip file1.txt

          解壓: unzip file1.zip

          5. 請寫出數據類型(int char varchar datetime text)的意思;請問 varchar 和 char有什么區別?

          Int 整數 char 定長字符 Varchar 變長字符 Datetime 日期時間型 Text 文本型 Varchar 與char的區別 char是固定長度的字符類型,分配多少空間,就占用多長空間。 Varchar是可變長度的字符類型,內容有多大就占用多大的空間,能有效節省空間。 由于varchar類型是可變的,所以在數據長度改變的時,服務器要進行額外的操作,所以效率比char類型低。

          6. MyISAM 和 InnoDB 的基本區別?索引結構如何實現?

          MyISAM類型不支持事務,表鎖,易產生碎片,要經常優化,讀寫速度較快,而InnoDB類型支持事務,行鎖,有崩潰恢復能力。讀寫速度比MyISAM慢。

          創建索引:alert table tablename add index (`字段名`)

          7. 不使用cookie向客戶端發送一個cookie.

          理解:session_start()開啟時,生成一個常量 SID,當COOKIE開啟時,這個常量為空,當COOKIE關閉時,這個常量中存儲了PHPSESSID的值。通過在URL后加一個SID參數來傳遞SESSIONID的值,從而使客戶端頁面可以使用SESSION里面的值。 當客戶端開啟COOKIE和服務器端開啟SESSION時。 瀏覽器第一次請求,服務器會向瀏覽器端發送一個COOKIE里面存儲SESSIONID. 當瀏覽器第二次請求時,會把已存在

          8. isset() 和 empty() 區別

          Isset判斷變量是否存在,可以傳入多個變量,若其中一個變量不存在則返回假,empty判斷變量是否為空為假,只可傳一個變量,如果為空為假則返回真。

          9. 如何在頁面之間傳遞變量(至少兩種方式) ? GET,POST,COOKIE,SESSION,隱藏表單

          1. 寫出匹配URL的正則表達式.

          ‘/^(https?|ftps?):\/\/(www)\.([^\.\/]+)\.(com|cn|org)(\/[\w-\.\/\?\%\&\=]*)?/i’

          2. 請寫出常見的排序算法,并用PHP實現冒泡排序,將數組$a=array()按照從小到大的方式進行排序。

          常見的排序算法: 冒泡排序法、快速排序法、簡單選擇排序法、堆排序法、直接插入排序法、希爾排序法、合并排序法。

          冒泡排序法的基本思想是:對待排序記錄關鍵字從后往前(逆序)進行多遍掃描,當發現相鄰兩個關鍵字的次序與排序要求的規則不符時,就將這兩個記錄進行交換。這樣,關鍵字較小的記錄將逐漸從后面向前面移動,就象氣泡在水中向上浮一樣,所以該算法也稱為氣泡排序法。

          // 冒泡排序法

          Function mysort($arr){

          For($i=0; $i<count($arr); $i++){

          For($j=0; $j<count($arr)-1-$i; $j++){

          If($arr[$j] > $arr[$j+1]){

          $tmp=$arr[$j];

          $arr[$j]=$arr[$j+1];

          $arr[$j+1]=$tmp;

          }

          }

          }

          Return $arr;

          }

          $arr=array(3,2,1);

          print_r(mysort($arr));

          3. 請說明 PHP 中傳值與傳引用的區別。什么時候傳值什么時候傳引用?

          按值傳遞:函數范圍內對值的任何改變在函數外部都會被忽略

          按引用傳遞:函數范圍內對值的任何改變在函數外部也能反映出這些修改

          優缺點:按值傳遞時,php必須復制值。特別是對于大型的字符串和對象來說,這將會是一個代價很大的操作。按引用傳遞則不需要復制值,對于性能提高很有好處。

          在PHP中error_reporting這個函數有什么作用?

          設置 PHP 的報錯級別并返回當前級別。

          請用正則表達式(Regular Expression)寫一個函數驗證電子郵件的格式是否正確。

          if(isset($_POST['action']) && $_POST['action']==’submitted’){

          $email=$_POST['email'];

          if(!preg_match(“/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+){1,3}$/”,$email)){

          echo “電子郵件檢測失敗”;

          }else{

          echo “電子郵件檢測成功”;

          }

          }

          使用PHP描述快速排序算法,對象可以是一個數組?

          原理:快速排序使用分治策略來把待排序數據序列分為兩個子序列,具體步驟為:

          (1)從數列中挑出一個元素,稱該元素為“基準”。

          (2)掃描一遍數列,將所有比“基準”小的元素排在基準前面,所有比“基準”大的元素排在基準后面。

          (3)通過遞歸,將各子序列劃分為更小的序列,直到把小于基準值元素的子數列和大于基準值元素的子數列排序。

          //快速排序(數組排序)

          function QuickSort($arr){

          $num=count($arr);

          $l=$r=0;

          for($i=1;$i<$num;$i++){

          if($arr[$i] < $arr[0]){

          $left[]=$arr[$i];

          $l++;

          }else{

          $right[]=$arr[$i];

          $r++;

          }

          }

          if($l > 1){

          $left=QuickSort($left);

          }

          $new_arr=$left;

          $new_arr[]=$arr[0];

          if($r > 1){

          $right=QuickSort($right);

          }

          for($i=0;$i<$r;$i++){

          $new_arr[]=$right[$i];

          }

          return $new_arr;

          }

          使用PHP描述順序查找和二分查找(也叫做折半查找)算法,順序查找必須考慮效率,對象可以是一個有序數組

          //二分查找(數組里查找某個元素)

          function bin_sch($array, $low, $high, $k){

          if ($low <=$high){

          $mid=intval(($low+$high)/2);

          if ($array[$mid]==$k){

          return $mid;

          }elseif ($k < $array[$mid]){

          return bin_sch($array, $low, $mid-1, $k);

          }else{

          return bin_sch($array, $mid+1, $high, $k);

          }

          }

          return -1;

          }

          //順序查找(數組里查找某個元素)

          function seq_sch($array, $n, $k){

          $array[$n]=$k;

          for($i=0; $i<$n; $i++){

          if($array[$i]==$k){

          break;

          }

          }

          if ($i<$n){

          return $i;

          }else{

          return -1;

          }

          }

          寫一個二維數組排序算法函數,能夠具有通用性,可以調用php內置函數(array_multisort())

          //二維數組排序, $arr是數據,$keys是排序的健值,$order是排序規則,1是升序,0是降序

          function array_sort($arr, $keys, $order=0) {

          if (!is_array($arr)) {

          return false;

          }

          $keysvalue=array();

          foreach($arr as $key=> $val) {

          $keysvalue[$key]=$val[$keys];

          }

          if($order==0){

          asort($keysvalue);

          }else {

          arsort($keysvalue);

          }

          reset($keysvalue);

          foreach($keysvalue as $key=> $vals) {

          $keysort[$key]=$key;

          }

          $new_array=array();

          foreach($keysort as $key=> $val) {

          $new_array[$key]=$arr[$val];

          }

          return $new_array;

          }

          請以空格作為間隔,拆分字符串’Apple Orange Banana Strawberry’,組成數組$fruit,

          * 數組中所有元素都用小寫字母,并按照字母先后次序排序

          class sort {

          private $str;

          public function __construct($str) {

          $this->str=strtolower($str);

          }

          private function explodes() {

          if(empty($this->str)) return array();

          $arr=explode(" ",$this->str);

          return is_array($arr)?$arr:array($arr);

          }

          public function sort() {

          $explode=$this->explodes();

          sort($explode);

          return $explode;

          }

          }

          $str='Apple Orange Banana Strawberry';

          $sortob=new sort($str);

          var_dump($sortob->sort());

          對于用戶輸入一串字符串$string,要求$string中只能包含大于0的數字和英文逗號,請用正則 表達式驗證,對于不符合要求的$string返回出錯信息

          class regx {

          public static function check($str) {

          if(preg_match("/^([1-9,])+$/",$str)) {

          return true;

          }

          return false;

          }

          }

          $str="12345,6";

          if(regx::check($str)) {

          echo "suc";

          } else {

          echo "fail";

          }

          請寫一段程序,在服務器創建一個文件fruit.dat,將試題3中得到的數組寫入到改文件中,然后寫一段程序從文件中讀取并還原數組@author zhuwenqiong

          class sort {

          private $str;

          public function __construct($str) {

          $this->str=strtolower($str);

          }

          private function explodes(){

          if(empty($this->str)) return array();

          $arr=explode(" ",$this->str);

          return is_array($arr)?$arr:array($arr);

          }

          public function sort() {

          $explode=$this->explodes();

          sort($explode);

          return $explode;

          }

          }

          class file {

          private $sort=null;

          private $filepath;

          public function __construct($arrobj,$path) {

          $this->sort=$arrobj;

          $this->filepath=$path;

          }

          private function getresource($filename,$mode) {

          return fopen($this->filepath.$filename,$mode);

          }

          private function closeresource($resource) {

          fclose($resource);

          }

          public function savefile($filename) {

          $arr=$this->sort->sort();

          $fopen=$this->getresource($filename,"a+");

          if(!$fopen){

          echo "文件打開失敗!";

          exit;

          }

          var_dump($arr);

          foreach($arr as $key=>$value) {

          fwrite($fopen,$value."\n");

          }

          $this->closeresource($fopen);

          }

          public function readfile($filename) {

          $this->savefile($filename);

          $fopen=$this->getresource($filename,"r");

          if(!$fopen){

          echo "文件打開失敗!";exit;

          }

          $arr=array();

          while(!feof($fopen)) {

          $get=fgets($fopen);

          if(!empty($get))

          $arr[]=str_replace("\n","",$get);

          }

          $this->closeresource($fopen);

          return $arr;

          }

          }

          $file=new file(new sort('Apple Orange Banana Strawberry'),"E:\");

          $arr=$file->readfile("fruit.dat");

          var_dump($arr);

          單例模式,創建mysqli數據庫鏈接的單例對象

          class Db {

          private static $instance;

          public $handle;

          Private function __construct($host,$username,$password,$dbname) {

          $this->handle=NULL;

          $this->getcon($host,$username,$password,$dbname);

          }

          public static function getBb() {

          self::$instance=new Db();

          return self::$instance;

          }

          private function getcon($host,$username,$password,$dbname) {

          if($this->handle!=NULL){

          return true;

          }

          $this->handle=mysqli_connect($host,$username,$password,$dbname);

          }

          }

          windows平臺, Apache Http Server啟動失敗, 排錯思路是什么?

          檢查apache使用的80端口是否被占用,如果被占用,先停止占用80端口的服務,然后啟動apache服務器

          PHP session擴展默認將session數據儲存在哪里? D

          A) SQLite Database

          B) MySQL Database

          C) Shared Memory

          D) File System

          E) Session Server

          如果你想要自動加載類,下面哪種函數聲明是正確的 C

          A) function autoload($class_name)

          B) function __autoload($class_name, $file)

          C) function __autoload($class_name)

          D) function _autoload($class_name)

          E) function autoload($class_name, $file)

          PHP程序使用utf-8編碼, 以下程序輸出結果是什么? B

          <?php

          $str=’hello你好世界’;

          echo strlen($str);

          ?>

          A) 9

          B) 13(gbk)

          C) 18

          D) 17(utf8)

          你所知道的php數組相關的函數?

          array()----創建數組

          array_combine()----通過合并兩個數組來創建一個新數組

          range()----創建并返回一個包含指定范圍的元素的數組

          compact()----建立一個數組

          array_chunk()----將一個數組分割成多個

          array_merge()----把兩個或多個數組合并成一個數組

          array_slice()----在數組中根據條件取出一段值

          array_diff()----返回兩個數組的差集數組

          array_intersect()----計算數組的交集

          array_search()----在數組中搜索給定的值

          array_splice()----移除數組的一部分且替代它

          array_key_exists()----判斷某個數組中是否存在指定的key

          shuffle()----把數組中的元素按隨機順序重新排列

          array_flip()----交換數組中的鍵和值

          array_reverse()----將原數組中的元素順序翻轉,創建新的數組并返回

          array_unique()----移除數組中重復的值

          php讀取文件內容的幾種方法和函數?

          打開文件,然后讀取。Fopen() fread()

          打開讀取一次完成 file_get_contents()

          以下程序,變量str什么值的情況下輸入111?

          if( ! $str ) { echo 111; }

          在$str值為:0,’0′,false,null,”"

          你所知道的PHP的一些技術(smarty等)?

          Smarty,jquery,ajax,memcache,div+css,js,mysqli,pdo,svn,thinkphp,brophp,yii

          你所熟悉的PHP論壇系統 有哪些?

          Discuz

          你所熟悉的PHP商城系統 有哪些?

          Ecshop

          你所熟悉的PHP開發框架 有哪些?

          Brophp,thinkphp

          說說你對緩存技術的了解?

          1、緩存技術是將動態內容緩存到文件中,在一定時間內訪問動態頁面直接調用緩存文件,而不必重新訪問數據庫。

          2、使用memcache可以做緩存。

          你所知道的設計模式有哪些?

          工廠模式、策略模式、單元素模式、觀察者模式、命令鏈模式

          說說你對代碼管理的了解? 常使用那些代碼版本控制軟件?

          通常一個項目是由一個團隊去開發,每個人將自己寫好的代碼提交到版本服務器,由項目負責人按照版本進行管理,方便版本的控制,提高開發效率,保證需要時可以回到舊版本。

          常用的版本控制器:SVN

          說說你對SVN的了解?優缺點?

          SVN是一種版本控制器,程序員開發的代碼遞交到版本服務器進行集中管理。

          SVN的優點:代碼進行集中管理,版本控制容易,操作比較簡單,權限控制方便。

          缺點:不能隨意修改服務器項目文件夾。

          怎么找到PHP.ini的路徑?

          一般都在php的安裝目錄下,或者window系統的windows目錄下。

          PHP加速模式/擴展? PHP調試模式/工具?

          Zend Optimizer加速擴展

          調試工具:xdebug

          你常用到的mysql命令?

          Show databases

          Show tables

          Insert into 表名() values()

          Update 表名 set 字段=值 where ...

          Delete from 表名 where ...

          Select * from 表名 where 條件 order by ... Desc/asc limit ... Group by ... Having ...

          進入mysql管理命令行的命令?

          Mysql -uroot -p 回車 密碼

          show databases; 這個命令的作用?

          顯示當前mysql服務器中有哪些數據庫

          show create database mysql; 這個命令的作用?

          顯示創建數據庫的sql語句

          show create table user; 這個命令的作用?

          顯示創建表的sql語句

          desc user; 這個命令的作用?

          查詢user表的結構

          explain select * from user; 這個命令的作用?

          獲取select相關信息

          show processlist; 這個命令的作用?

          顯示哪些線程正在運行

          SHOW VARIABLES; 這個命令的作用?

          顯示系統變量和值

          SHOW VARIABLES like ’%conn%’; 這個命令的作用?

          顯示系統變量名包含conn的值

          LEFT JOIN 寫一個SQL語句?

          1

          SELECT A.id,A.class FROM A LEFT JOIN B ON A.cid=B.id

          in, not ni, exist, not exist的作用和區別?

          in在什么中

          Not in 不在什么中

          Exists 存在

          Not exists 不存在

          怎么找到數據庫的配置文件路徑?

          在數據庫安裝目錄下,my.ini

          簡述Linux下安裝PHP的過程?

          安裝軟件之前先安裝編譯工具gcc、gcc-c++

          拷貝源碼包,解包解壓縮

          Cd /lamp/php進入php目錄

          ./configure –prefix=/usr/local/php –with-config-file-path=/usr/local/php/etc指定安裝目錄和配置文件目錄

          Make 編譯

          Make install安裝

          簡述Linux下安裝Mysql的過程?

          Groupadd mysql 添加一個用戶組mysql

          Useradd -g mysql mysql 添加一個mysql用戶指定分組為mysql

          Cd /lamp/mysql 進入mysql目錄

          ./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all

          Make

          Make all

          簡述Linux下安裝apache的過程?

          Cd /lamp/httpd 進去apache軟件目錄

          ./configure –prefix=/usr/local/apache2/ –sysconfdir=/etc/httpd/ –with-included-apr

          Make

          Make all

          HTML/CSS/DIV/Javascritp:

          1. 設計一個頁面(4個 div 第一個div 寬960px 居中;第2-4個div 3等分960px;)

          <style>

          Body{ Text-align:center; Margin:0; Padding:0; }

          #box{ Width:960px; Margin:0 auto; }

          .small{ Width:320px; Float:left; }

          </style>

          <div id=’box’>

          <div class=’small’></div>

          <div class=’small’></div>

          <div class=’small’></div>

          </div>

          用javascript取得一個input的值?取得一個input的屬性?

          document.getElementById(‘name’).value;

          document.getElementById(‘name’).type;

          用Jquery取得一個input的值?取得一個input的屬性?

          $(“input[name='aa']“).val();

          $(“input[name='aa']“).attr(‘type’);

          請您寫一段ajax提交的js代碼,或者寫出ajax提交的過程邏輯。

          var xmlhttp;

          if(window.XMLHttpRquest){

          xmlhttp=new XMLHttpRequest();

          }else if(window.ActiveXObject){

          xmlhttp=new ActiveXObject(‘Microsoft.XMLHTTP’);

          }

          xmlhttp.open(‘GET’,’1.php?aa=name’,true);

          xmlhttp.onreadystatechange=function(){

          if(xmlhttp.readyState==4){

          if(xmlhttp.status==200){

          var text=xmlhttp.responseText;

          }

          }

          }

          xmlhttp.send(null);

          簡述Cookie的設置及獲取過程

          設置COOKIE的值:

          Setcookie(名稱,值,保存時間,有效域);

          獲取值:$_COOKIE['名稱'];

          面向對象中接口和抽象類的區別及應用場景?

          1、有抽象方法的類叫做抽象類,抽象類中不一定只有抽象方法,抽象方法必須使用abstract關鍵字定義。

          2、接口中全部是抽象方法,方法不用使用abstract定義。

          3、當多個同類的類要設計一個上層,通常設計為抽象類,當多個異構的類要設計一個上層,通常設計為接口。

          用面向對象來實現A對象繼承B和C對象

          Interface B{ ... }

          Interface C{ ... }

          Class A implements B,C{ ... }

          寫出Smarty模板引擎中你最常用的關鍵詞

          Assign Display Foreach

          Section Loop Item

          $smarty Now Const get

          l 增加一個字段性別sex,寫出修改語句

          Alert table user add sex enum(’0′,’1′);

          查詢出年齡介于20歲到30歲之間的用戶

          Select * from user where age>20 and age<30

          如果是一個Web頻繁訪問的查詢,上題的查詢如何優化?

          可對where后面的字段 age 建立索引,也可對語句建立存儲過程。

          echo(),print(),print_r()的區別?

          Echo,print是PHP語句, print_r是函數,

          Print()只能打印出簡單類型變量的值(如int,string),有返回值。

          print_r()可以打印出復雜類型變量的值(如數組,對象)

          echo 輸出一個或者多個字符串,無返回值

          什么是模板技術、能夠使HTML和PHP分離開使用的模板?

          模板技術就是使程序的邏輯代碼和界面分開的技術。

          能夠使HTML和PHP分開的模板有:Smarty、Template、PHPlib Template、FastTemplate

          對于大流量的網站,您采用什么樣的方法來解決訪問量問題?

          優化程序,優化數據庫,如果程序和數據庫已經最優化,使用以下解決方法:

          1、確定當前服務器設備是否滿足流量需求。

          2、使用Memcache緩存技術,把動態內容緩存到文件中,動態網頁直接調用這些文件,而不必再訪問數據庫。

          3、禁止外部盜鏈,圖片和文件外部盜鏈會給服務器帶來大量的負載壓力,可以通過refer來禁止外部盜鏈,或者使用apache來配置禁止盜鏈。

          4、控制大文件的下載,大文件的下載對于非SCSI硬盤來說會占用大量的資源,導致服務器的響應能力下降。

          5、使用不同的主機分流主要流量,使服務器均衡負載。

          6、使用流量統計軟件統計分析網站流量,可以知道哪些地方耗費了大量的流量,哪些頁面需要再進行優化。

          mysql_fetch_row() 和mysql_fetch_array之間有什么區別?

          Mysql_fetch_row()是從結果集中取出一行作為枚舉數組,mysql_fetch_array()是從結果集中取出一行作為索引數組或關聯數組或兩種方式都有。

          實現中文字串截取無亂碼的方法

          Mb_substr();

          用PHP寫出顯示客戶端IP與服務器IP的代碼

          獲取客戶端IP:$_SERVER(“REMOTE_ADDR”);

          獲取服務器端IP:$_SERVER["SERVER_ADDR"];

          有一個網頁地址, 比如PHP開發資源網主頁: http://www.phpres.com/index.html,如何得到它的內容?

          獲取網頁內容:

          $url=”http://www.phpres.com/index.html“;

          $str=file_get_contents($url);

          或 $ch=curl_init();

          curl_setopt($ch,CURLOPT_URL,’’);

          curl_setopt($ch,CURLOPT_HEADER,0);

          curl_exec($ch);

          curl_close($ch);

          請寫一個函數驗證電子郵件的格式是否正確

          function checkemail($email){

          echo preg_match(‘/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+\.[0-9a-zA-Z]+$/’,$email)?’email格式正確‘:’email格式不正確‘;

          }

          簡述如何得到當前執行腳本路徑,包括所得到參數

          用$_SERVER['SCRIPT_FILENAME'].$_SERVER['REQUEST_URI'];取得當前頁面的完整路徑和參數。

          取得參數:$_SERVER['QUERY_STRING'];

          JS表單彈出對話框函數是?獲得輸入焦點函數是?

          Alert(); focus();

          寫一個函數,算出兩個文件的相對路徑

          如 $a=’/a/b/c/d/e.php’;

          $b=’/a/b/12/34/c.php’;

          計算出 $b 相對于 $a 的相對路徑應該是 http://www.cnblogs.com/c/d將()添上

          $a=”http://www.cnblogs.com/a/b/c/d/e.php”;

          $b=”http://www.cnblogs.com/a/b/12/34/c.php”;

          $ainfo=parse_url($a);

          $binfo=parse_url($b);

          $apath=ltrim($ainfo['path'],'/');

          $bpath=ltrim($binfo['path'],'/');

          $arr=explode('/',$apath);

          $brr=explode('/',$bpath);

          $flag=false;

          for($i=0;$i<count($arr);$i++){

          if($arr[$i]!==$brr[$i]){

          $ab[$i]='..';

          if(!$flag){

          for($j=$i;$j<count($brr);$j++){

          $bb[]=$brr[$j];

          }

          $flag=true;

          }

          }

          }

          $cha=array_merge($ab,$bb);

          $cha=implode('/',$cha);

          print_r($cha);

          寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。

          function my_scandir($dir){

          $files=array();

          if ( $handle=opendir($dir) ){

          while ( ($file=readdir($handle)) !==false ) {

          if ( $file !=".." && $file !="." ) {

          if ( is_dir($dir . "/" . $file) ) {

          $files[$file]=scandir($dir . "/" . $file);

          }else {

          $files[]=$file;

          }

          }

          }

          closedir($handle);

          return $files;

          }

          }

          數據庫索引有幾類,分別是什么?什么時候該用索引?

          普通索引、主鍵索引、唯一索引

          并非所有的數據庫都以相同的方式使用索引,作為通用規則,只有當經常查詢列中的數據時才需要在表上創建索引。

          寫幾個魔術方法并說明作用?

          __call()當調用不存在的方法時會自動調用的方法

          __autoload()在實例化一個尚未被定義的類是會自動調用次方法來加載類文件

          __set()當給未定義的變量賦值時會自動調用的方法

          __get()當獲取未定義變量的值時會自動調用的方法

          __construct()構造方法,實例化類時自動調用的方法

          __destroy()銷毀對象時自動調用的方法

          __unset()當對一個未定義變量調用unset()時自動調用的方法

          __isset()當對一個未定義變量調用isset()方法時自動調用的方法

          __clone()克隆一個對象

          __tostring()當輸出一個對象時自動調用的方法

          $_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILES的意思是什么?

          它們都是PHP預定義變量

          $_REQUEST用來獲取post或get方式提交的值

          $_POST用來獲取post方式提交的值

          $_GET用來獲取get方式提交的值

          $_COOKIE用來獲取cookie存儲的值

          $_SESSION用來獲取session存儲的值

          $_FILES用來獲取上傳文件表單的值

          數組中下標最好是什么類型的,為什么?

          數組的下標最好是數字類型的,數字類型的處理速度快。

          ++i和i++哪一個效率高,為什么?

          ++i效率比i++的效率更高,因為++i少了一個返回i的過程。

          magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?

          Magic_quotes_gpc()是php配置文件中的,如果設置為on則會自動POST,GET,COOKIE中的字符串進行轉義,在‘之前加\

          Magic_quotes_runtime()是php中的函數,如果參數為true則會數據庫中取出來的單引號、雙引號、反斜線自動加上反斜杠進行轉義。

          框架中什么是單一入口和多入口,單一入口的優缺點?

          1、多入口就是通過訪問不同的文件來完成用戶請求。

          單一入口指web程序所有的請求都指向一個腳本文件的。

          2、單一入口更容易控制權限,方便對http請求可以進行安全性檢查。

          缺點:URL看起來不那么美觀,特別是對搜索引擎來說不友好。

          你對Memcach的理解,優點有哪些?

          Memcache是一種緩存技術,在一定的時間內將動態網頁經過解析之后保存到文件,下次訪問時動態網頁就直接調用這個文件,而不必在重新訪問數據庫。使用memcache做緩存的好處是:提高網站的訪問速度,減輕高并發時服務器的壓力。

          Memcache的優點:穩定、配置簡單、多機分布式存儲、速度快。

          對關系型數據庫而言,索引是相當重要的概念,請回答有關索引幾個問題:

          a) 索引的目的是什么?

          1、快速訪問數據表中的特定信息,提高檢索速度

          2、創建唯一性索引,保證數據庫表中每一行數據的唯一性

          3、加速表和表之間的連接

          4、使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間

          b) 索引對數據庫系統的負面影響是什么?

          負面影響:創建索引和維護索引需要耗費時間,這個時間隨著數據量的增加而增加;索引需要占用物理空間,不光是表需要占用數據空間,每個索引也需要占用物理空間;當對表進行增、刪、改的時候索引也要動態維護,這樣就降低了數據的維護速度。

          c) 為數據表建立索引的原則有哪些?

          1、在最頻繁使用的、用以縮小查詢范圍的字段上建立索引

          2、在平頻繁使用的、需要排序的字段上建立索引

          d) 什么情況下不宜建立索引?

          1、對于查詢中很少涉及的列或者重復值比較多的列,不宜建立索引

          2、對于一些特殊的數據類型,不宜建立索引,比如文本字段(text),值范圍較少的知道等。

          web應用中,數據庫的讀取頻率遠高于寫入頻率, 如何優化MySQL而應對此種情景?

          使用memcache緩存技術,將動態數據緩存到文件,訪問動態頁面時直接調用緩存文件,而不必重新訪問數據庫,這樣就減少了查詢數據庫的次數。

          如果網站的訪問量很大,可以把數據庫讀寫服務器分開,使用多臺服務器去處理數據庫查詢,使用較少的服務器去處理數據庫的寫入和修改。

          include與require的區別?

          1.include()在執行文件時每次都要進行讀取和評估

          require()文件只處理一次(實際上文件內容替換了require()語句)

          2.require()通常放在PHP腳本程序的最前面

          include()的使用和require()一樣,一般放在流程控制的處理區段中,PHP腳本文件讀到include()語句時,才將它包含的文件讀進來,這種方式,可以把程序執行時的流程簡單化

          3,require()和include()語句是語言結構,不是真正的函數,可以像PHP的其他語言結構一樣

          4,include_once()和require_once()語句也是在腳本執行期間包括并運行指定文件,與include()require()唯一的區別是如果文件中的代碼已經被包括了,則不會再次包括.

          5,require()包含文件失敗,停止執行,給出錯誤(致命的)

          include()常用于動態包含.

          通常是自動加載的文件,即使加載出錯,整個程序還是繼續執行

          一個頁面聲明,另一個頁面調用

          包函文件失敗,繼續向下執行,返回一條警告

          PHP字符串中單引號與雙引號的區別?

          單引號不能解釋變量,而雙引號可以解釋變量。

          單引號不能轉義字符,在雙引號中可以轉義字符。

          php中,模板引擎的目的是什么? 你用過哪些模板引擎?

          使用模板引擎的目的是使程序的邏輯代碼和html界面代碼分離開,是程序的結構更清晰。

          使用過的模板引擎:Smarty、ThinkPHP的ThinkTemplate

          指出以下代碼片段中的SQL注入漏洞以及解決方法(magic_quotes_gpc=off)

          1

          mysql_query(“select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%’”, $link);

          注入漏洞主要存在用戶提交的數據上,這里的注入漏洞主要是$_GET[catid]和$_GET[keyword]

          解決注入漏洞:

          $_GET[catid]=intval($_GET[catid]);

          $sql=”select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%”;

          $sql=addslashes($sql);

          Mysql_query($sql);

          分別指出php.ini中 magic_quotes_gpc, magic_quotes_runtime兩項參數的作用.

          Magic_quotes_gpc的作用是在POST、GET、COOKIE數據上使用addslashes()自動轉義。

          Magic_quotes_runtime參數的作用是設置狀態,當狀態為0時則關閉自動轉義,設置為1則自動轉義,將數據庫中取出來的單引號、雙引號、反斜線這些字符加上反斜杠轉義。

          寫出以下php代碼的運行結果:

          <?php

          function foo($i) {

          $i++;

          echo $i ;

          }

          function bar(&$i) {

          }

          $i=10 ;

          echo $i++ , ++$i; 輸出:10,12

          foo($i); 輸出:13

          bar($i); 輸出:無輸出

          如何快速下載一個遠程http服務器上的圖片文件到本地?

          $file=”";

          $fp=fopen($file,’rb’);

          $img=fread($fp,10000);

          $dir=”./”;

          $local=fopen($dir.’/’.basename($file),’w');

          Fwrite($local,$img);

          什么是時間戳? 如何取得當前時間戳?

          時間戳是從1970年1月1日 00:00:00到指定日期的秒數。

          獲取當前時間戳:time()

          了解XSS攻擊嗎? 如何防止 ?

          XSS是跨站腳本攻擊,首先是利用跨站腳本漏洞以一個特權模式去執行攻擊者構造的腳本,然后利用不安全的Activex控件執行惡意的行為。

          使用htmlspecialchars()函數對提交的內容進行過濾,使字符串里面的特殊符號實體化。

          SQL注入漏洞產生的原因 ? 如何防止?

          SQL注入產生的原因:程序開發過程中不注意規范書寫sql語句和對特殊字符進行過濾,導致客戶端可以通過全局變量POST和GET提交一些sql語句正常執行。

          防止SQL注入:

          1、開啟配置文件中的magic_quotes_gpc和magic_quotes_runtime設置

          2、執行sql語句時使用addslashes進行sql語句轉換

          3、Sql語句書寫盡量不要省略小引號和單引號

          4、過濾掉sql語句中的一些關鍵字:update、insert、delete、select、*

          5、提高數據庫表和字段的命名技巧,對一些重要的字段根據程序的特點命名,取不易被猜到的。

          6、Php配置文件中設置register_globals為off,關閉全局變量注冊

          7、控制錯誤信息,不要再瀏覽器上輸出錯誤信息,將錯誤信息寫到日志文件中。

          一個字節占多少bit ? 一個IPv4地址占幾個字節? 一個IPv6地址呢?

          一個字節占8bit,一個IPV4占用4字節,一個IPV6占用16字節。

          142.M ADSL寬帶連接, 理想情況下, 最大下載速度是多少KB/s ?

          256KB/s

          143.請寫出一個正則表達式,用于匹配一個HTML文件中<img />標記中的圖片地址

          $url=”<img src=’11.jpg’/>”;

          /<img[\s]*src=['|\"](.*)['|\"][\s]*\/>/

          145.Fatal error: Call to undefined method ge_user() in /website/index.php on line 39

          調用了未定義的方法ge_user(),檢查程序中有沒有定義此方法

          146.Fatal error: Class ’client’ not found in /website/index.php on line 173

          類client沒有找到,檢查文件中有沒有client類,或者有沒有包含client類文件

          Warning: Cannot modify header information - headers already sent by (output started at /website/index.php:1) in /website/index.php on line 3

          提示文件前面有輸出,檢查是否有輸出,或者編碼

          148.Warning:session_start(): open(/website/tmp/sess_47e067121facf033785f9a1cb16d243b, O_RDWR) failed: No such file or directory (2) in /website/index.php on line 10

          沒有找到文件或目錄,檢查文件是否存在

          149.Parse error: syntax error, unexpected T_STRING in /website/index.php on line 18

          18行語法錯誤,檢查語法

          150.Warning:fopen(welcome.txt) [function.fopen]: failed to open stream: No such file or directory in /website/index.php on line 2

          沒有找到welcome.txt文件,檢查文件是否存在

          1、抓取遠程圖片到本地,你會用什么函數?

          fsockopen, A

          3、用PHP打印出前一天的時間,打印格式是2007年5月10日22:21:21

          Echo date(‘Y-m-d H:i:s’,strtotime(‘-1 day’));

          4、javascript能否定義二維數組,如果不能你如何解決?

          javascript不支持二維數組定義,可以用arr[0]=new array()來解決

          5、假設a.html和b.html在同一個文件夾下面,用javascript實現當打開a.html五秒鐘后,自動跳轉到b.html。

          <script>

          function go2b(){

          window.location=“b.html”;

          window.close();

          }

          setTimeout( “go2b()”,5000 ); //5秒鐘后自動執行go2b()

          </script>

          //正在瀏覽當前頁面用戶的 IP 地址:127.0.0.1

          echo $_SERVER["REMOTE_ADDR"].”<br />”;

          //查詢(query)的字符串(URL 中第一個問號 ? 之后的內容):id=1&bi=2

          echo $_SERVER["QUERY_STRING"].”<br />”;

          //當前運行腳本所在的文檔根目錄:d:inetpubwwwroot

          echo $_SERVER["DOCUMENT_ROOT"].”<br />”;

          7、在HTTP 1.0中,狀態碼 401 的含義是未授權____;如果返回“找不到文件”的提示,則可用 header 函數,其語句為header(“HTTP/1.0 404 Not Found”);

          401表示未授權;header(“HTTP/1.0 404 Not Found”);

          9、把 John 新增到 users 陣列?

          $users[]=‘john’; array_push($users,‘john’);

          在PHP中error_reporting這個函數有什么作用?

          error_reporting() 設置 PHP 的報錯級別并返回當前級別。

          13、如何修改SESSION的生存時間(1分).

          方法1:將php.ini中的session.gc_maxlifetime設置為9999重啟apache

          方法2:$savePath=“./session_save_dir/”;

          $lifeTime=小時 * 秒;

          session_save_path($savePath);

          session_set_cookie_params($lifeTime);

          session_start();

          方法3:

          setcookie() and session_set_cookie_params($lifeTime);

          14、有一個網頁地址, 比如PHP開發資源網主頁: http://www.phpres.com/index.html,如何得到它的內容?(分)

          方法1(對于PHP5及更高版本):

          $readcontents=fopen(“http://www.phpres.com/index.html”, “rb”);

          $contents=stream_get_contents($readcontents);

          fclose($readcontents);

          echo $contents;

          方法2:

          echo file_get_contents(“http://www.phpres.com/index.html”);

          16、寫一個函數,盡可能高效的,從一個標準 url 里取出文件的擴展名

          例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php

          答案1:

          function getExt($url){

          $arr=parse_url($url);

          $file=basename($arr['path']);

          $ext=explode(“.”,$file);

          return $ext[1];

          }

          答案2:

          function getExt($url) {

          $url=basename($url);

          $pos1=strpos($url,”.”);

          $pos2=strpos($url,”?”);

          if(strstr($url,”?”)){

          Return substr($url,$pos1 + 1,$pos2 – $pos1 – 1);

          } else {

          return substr($url,$pos1);

          }

          }

          使用五種以上方式獲取一個文件的擴展名

          要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,

          必須使用PHP自帶的處理函數進行處理,方法不能明顯重復,可以封裝成函數 get_ext1($file_name), get_ext2($file_name)

          function get_ext1($file_name){

          return strrchr($file_name, ‘.’);

          }

          function get_ext2($file_name){

          return substr($file_name,strrpos($file_name, ‘.’));

          }

          function get_ext3($file_name){

          return array_pop(explode(‘.’, $file_name));

          }

          function get_ext4($file_name){

          $p=pathinfo($file_name);

          return $p['extension'];

          }

          function get_ext5($file_name){

          return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), ‘.’)));

          }

          18、<?php

          $str1=null;

          $str2=false;

          echo $str1==$str2 ? ‘相等’ : ‘不相等’;

          $str3=”;

          $str4=0;

          echo $str3==$str4 ? ‘相等’ : ‘不相等’;

          $str5=0;

          $str6=’0′;

          echo $str5===$str6 ? ‘相等’ : ‘不相等’;

          ?>

          相等 相等 不相等

          MySQL數據庫中的字段類型varchar和char的主要區別是什么?那種字段的查找效率要高,為什么?

          Varchar是變長,節省存儲空間,char是固定長度。查找效率要varchar型快,因為varchar是非定長,必須先查找長度,然后進行數據的提取,比char定長類型多了一個步驟,所以效率低一些

          請使用JavaScript寫出三種產生一個Image 標簽的方法(提示:從方法、對象、HTML角度考慮)

          (1)var img=new Image();

          (2)var img=document.createElement(“image”)

          (3)img.innerHTML=“<img src=”xxx.jpg” />”

          請描述出兩點以上XHTML和HTML最顯著的區別

          (1)XHTML必須強制指定文檔類型DocType,HTML不需要

          (2)XHTML所有標簽必須閉合,HTML比較隨意

          寫出三種以上MySQL數據庫存儲引擎的名稱(提示:不區分大小寫)

          MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十幾個引擎

          求兩個日期的差數,例如2007-2-5 ~ 2007-3-6 的日期差數

          方法一:

          <?php

          class Dtime{

          function get_days($date1, $date2){

          $time1=strtotime($date1);

          $time2=strtotime($date2);

          return ($time2-$time1)/86400;

          }

          }

          $Dtime=new Dtime;

          echo $Dtime->get_days(’2007-2-5′, ’2007-3-6′);

          ?>

          方法二:

          <?php

          $temp=explode(‘-’, ’2007-2-5′);

          $time1=mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);

          $temp=explode(‘-’, ’2007-3-6′);

          $time2=mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);

          echo ($time2-$time1)/86400;

          方法三:echo abs(strtotime(“2007-2-1″)-strtotime(“2007-3-1″))/60/60/24 計算時間差

          請寫一個函數,實現以下功能:

          字符串“open_door” 轉換成 “OpenDoor”、”make_by_id” 轉換成 ”MakeById”。

          方法:

          function str_explode($str){

          $str_arr=explode(“_”,$str);$str_implode=implode(” “,$str_arr); $str_implode=implode

          (“”,explode(” “,ucwords($str_implode)));

          return $str_implode;

          }

          $strexplode=str_explode(“make_by_id”);print_r($strexplode);

          方法二:

          $str=”make_by_id!”;

          $expStr=explode(“_”,$str);

          for($i=0;$i<count($expStr);$i++){

          echo ucwords($expStr[$i]);

          }

          方法三:echo str_replace(‘ ‘,”,ucwords(str_replace(‘_’,’ ‘,’open_door’)));

          一個表中的Id有多個記錄,把所有這個id的記錄查出來,并顯示共有多少條記錄數,用SQL語句及視圖、存儲過程分別實現。

          DELIMITER //

          create procedure proc_countNum(in columnId int,out rowsNo int)

          begin

          select count(*) into rowsNo from member where member_id=columnId;

          end

          call proc_countNum(1,@no);

          select @no;

          方法:視圖:

          create view v_countNum as select member_id,count(*) as countNum from member group by

          member_id

          select countNum from v_countNum where member_id=1

          js中網頁前進和后退的代碼

          前進: history.forward();=history.go(1);

          后退: history.back();=history.go(-1);

          echo count(“abc”); 輸出什么?

          答案:1

          count — 計算數組中的單元數目或對象中的屬性個數

          int count ( mixed$var [, int $mode ] ), 如果 var 不是數組類型或者實現了 Countable 接口的對象,將返回1,有一個例外,如果 var 是 NULL 則結果是 0。

          對于對象,如果安裝了 SPL,可以通過實現 Countable 接口來調用 count()。該接口只有一個方法 count(),此方法返回 count() 函數的返回值。

          有一個一維數組,里面存儲整形數據,請寫一個函數,將他們按從大到小的順序排列。要求執行效率高。并說明如何改善執行效率。(該函數必須自己實現,不能使用php函數)

          <?php

          function BubbleSort(&$arr){

          $cnt=count($arr);

          $flag=1;

          for($i=0;$i<$cnt;$i++){

          if($flag==0){

          return;

          }

          $flag=0;

          for($j=0;$j<$cnt-$i-1;$j++){

          if($arr[$j]>$arr[$j+1]){

          $tmp=$arr[$j];

          $arr[$j]=$arr[$j+1];

          $arr[$j+1]=$tmp;

          $flag=1;

          }

          }

          }

          }

          $test=array(1,3,6,8,2,7);

          BubbleSort($test);

          var_dump($test);

          30、請舉例說明在你的開發過程中用什么方法來加快頁面的加載速度

          要用到服務器資源時才打開,及時關閉服務器資源,數據庫添加索引,頁面可生成靜態,圖片等大文件單獨服務器。使用代碼優化工具。

          31、.以下的代碼會產生什么?為什么?

          $num=10;

          function multiply(){

          $num=$num *10;

          }

          multiply();

          echo $num;

          由于函式 multiply() 沒有指定 $num 為全域變量(例如 global $num 或者 $_GLOBALS['num']),所以 $num 的值是 10。

          HTTP協議中GET、POST和HEAD的區別?

          HEAD: 只請求頁面的首部。

          GET: 請求指定的頁面信息,并返回實體主體。

          POST: 請求服務器接受所指定的文檔作為對所標識的URI的新的從屬實體。

          (1)HTTP 定義了與服務器交互的不同方法,最基本的方法是 GET 和 POST。事實上 GET 適用于多數請求,而保留 POST 僅用于更新站點。

          (2)在FORM提交的時候,如果不指定Method,則默認為GET請 求,Form中提交的數據將會附加在url之后,以?分開與url分開。字母數字字符原樣發送,但空格轉換為“+“號,其它符號轉換為%XX,其中XX為 該符號以16進制表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;

          GET方式提交的數據最多只能有1024字節,而POST則沒有此限制。

          (3)GET 這個是瀏覽器用語向服務器請求最常用的方法。POST這個方法也是用來傳送數據的,但是與GET不同的是,使用POST的時候,數據不是附在URI后面傳遞的,而是要做為獨立的行來傳遞,此時還必須要發送一個Content_length標題,以標明數據長度,隨后一個空白行,然后就是實際傳送的數據。網頁的表單通常是用POST來傳送的。

          現代社會中,獲取信息已經變得極其重要。無論是企業還是個人,都需要及時了解市場動態、競爭對手情況等信息。而在這個信息化時代,網絡上的各種信息成為了人們獲取信息的主要途徑。因此,如何高效地獲取網絡上的信息已經成為了一個必須解決的問題。本文將介紹如何使用PHP采集標題鏈接,讓你輕松獲取需要的信息。

          一、什么是PHP采集標題鏈接

          PHP采集標題鏈接,指的是使用PHP編程語言來實現對網頁中標題和鏈接的抓取。通過這種方式,我們可以快速準確地獲取到所需信息。

          二、PHP采集標題鏈接的優點

          相比于手動復制粘貼或使用第三方工具,使用PHP采集標題鏈接具有以下優點:

          1.快速準確:使用程序自動化處理,可以提高效率和準確度;

          2.靈活性強:可以根據實際需求靈活設置抓取規則;

          3.數據處理方便:可以將數據保存到數據庫或文件中進行進一步處理。

          三、如何使用PHP采集標題鏈接

          下面我們將介紹具體的操作步驟:

          1.準備工作:需要安裝PHP環境以及相關的擴展庫,例如php-curl、php-dom等;

          2.獲取目標網頁:可以使用curl庫或file_get_contents函數獲取目標網頁的源代碼;

          3.解析網頁內容:使用DOMDocument類解析源代碼,獲取所需的標題和鏈接;

          4.處理數據:將獲取到的數據保存到數據庫或文件中。

          四、PHP采集標題鏈接的應用場景

          PHP采集標題鏈接可以廣泛應用于以下領域:

          1.競品分析:對比競爭對手的產品信息,了解市場動態;

          2.數據挖掘:挖掘用戶評論、社交網絡等數據,進行情感分析等研究;

          3.新聞聚合:自動抓取各大新聞網站的頭條新聞,進行聚合展示。

          五、PHP采集標題鏈接的注意事項

          在使用PHP采集標題鏈接時,需要注意以下事項:

          1.不要過度頻繁地訪問同一網站,以免被封IP;

          2.要遵守robots協議,尊重網站所有者的權益;

          3.對于需要登錄才能查看的網站,需要先模擬登錄再進行抓取。

          六、案例分析

          下面我們以抓取拉勾網招聘信息為例,介紹如何使用PHP采集標題鏈接。

          1.獲取目標網頁

          使用curl庫獲取目標網頁的源代碼:

          $url='';
          $ch=curl_init();
          curl_setopt($ch, CURLOPT_URL,$url);
          curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
          curl_setopt($ch, CURLOPT_HEADER,0);
          $output=curl_exec($ch);
          curl_close($ch);
          

          2.解析網頁內容

          使用DOMDocument類解析源代碼,獲取所需的標題和鏈接:

          $doc=new DOMDocument();
          @$doc->loadHTML($output);
          $xpath=new DOMXPath($doc);
          $titleList=$xpath->query('//h3[@class="position"]/a');
          $linkList=$xpath->query('//h3[@class="position"]/a/@href');
          foreach ($titleList as $key=>$title){
              echo $title->nodeValue ."\n";
              echo ''.$linkList[$key]->nodeValue ."\n";
          }
          

          3.處理數據

          將獲取到的數據保存到文件中:

          $file=fopen('result.txt','w');
          foreach ($titleList as $key=>$title){
              fwrite($file,$title->nodeValue ."\n");
              fwrite($file,''.$linkList[$key]->nodeValue ."\n");
          }
          fclose($file);
          

          七、總結

          本文介紹了如何使用PHP采集標題鏈接來獲取網絡上的信息,以及其優點、應用場景、注意事項和案例分析。相信讀者們已經對這個工具有了更深入的理解,并能夠在實際應用中靈活運用。

          里簡要介紹一下在PHP語言中實現郵件發送的兩種方法,分別是使用socket發送和使用mail()函數發送的方式。

          1.使用socket發送原理:使用fsockopen函數打開一個Internet連接,函數的參數列表為fsockopen(string hostname,int port,int [errno],string [errstr],int [timeout]),這里由于要使用SMTP協議,所以端口號是25.在打開連接成功后,會返回一個socket句柄,使用它就可以像使用文件句柄一樣,可使用的操作有fputs(),fgets(),feof(),fclose()等。該函數的返回值有以下幾種:

          • 220 服務就緒(在socket連接成功時,會返回此信息)

          • 221 正在處理

          • 250 請求郵件動作正確

          • 354 開始發送數據

          • 500 語法錯誤,命令不能識別

          • 550 命令不能執行,郵箱無效

          • 552 中斷處理:用戶超出文件空間

          但是,需要注意的是使用socket發送要保證開啟php的fsockopen()函數,你可能需要:

          • php.ini文件中查找allow_url_fopen=On 確保該項值為On

          • php.ini文件中查找;extension=php_openssl.dll 如果前面有分號,去掉分號

          • 重啟web服務器,apache或IIS

          這里有個開源的發送郵件類可供直接發送郵件,使用的是socket發送原理,親測可用,供大家參考:sendmail.zip

          2.使用mail()函數發送:mail()函數是PHP語言自帶的一個郵件發送函數,但是并不代表使用它可以直接進行郵件發送,需配置php.ini郵件信息、需要類似sendmail這樣的組件支持。

          (1)下載sendmail軟件(如果你是用xampp,那里面直接就帶了),下載地址:http://www.glob.com.au/sendmail/,解壓到D盤,供下列步驟(2)中的sendmail.path填寫

          (2)配置php.ini,需配置內容如下:

          [mail function]
          ; For Win32 only.
          SMTP=localhost
          smtp_port=25
          ; For Win32 only.
          sendmail_from=417204900@qq.com
          ; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
          sendmail_path="D:/sendmail/sendmail.exe -t -i"

          (3)配置sendmail.ini,需配置內容如下:

          smtp_server=smtp.qq.com
          smtp_port=25
          smtp_ssl=auto
          error_logfile=error.log
          debug_logfile=debug.log
          auth_username=yourname such as 12@qq.com
          auth_password=yourpassword such as 123456
          pop3_server=pop3_username=pop3_password=

          smtp_server=,這個需要填寫你想選用的smtp服務器,可以選擇本地搭建,也可以選擇163、QQ、gmail(如果是gmail需要服務器啟用ssl_module modules)的smtp或者pop3服務器。注意第一次使用建議把debug_logfile=debug.log前面的;去掉,這樣可以記錄每次發送郵件的具體信息了,如果發生錯誤可以在error.log里面找到。auth_username=、auth_password=需要填寫你的stmp賬戶信息(具體可以Google一下),如果是pop3則對應填寫。填寫一類就可以了。

          (4)測試代碼

          <?
          $now=date("Y-m-d h:i:s");
          $from_name='IECspace';
          $from_email='417204900@qq.com';
          $to='764739533@qq.com';
          $headers="From: <$from_name>";
          $message="這是一封來自 <$from_email>的測試郵件.";
          $subject="[$now] 郵件測試";
          if (mail($to, $subject,$message,$headers)) {
          echo "success!";
          } else {
          echo "fail…";
          }
          ?>

          3.另一個開源郵件發送包:PHPMailer,下載地址:http://sourceforge.net/projects/phpmailer/files/。下載完成后,直接查看里面的example文件夾,有各種例子,很詳細~~~贊一個


          主站蜘蛛池模板: 日韩精品一区二区三区老鸦窝| 国产精品合集一区二区三区| 日本精品少妇一区二区三区| 台湾无码一区二区| 69久久精品无码一区二区| 一区二区视频免费观看| 精品日韩一区二区三区视频| 91视频一区二区| 国产伦理一区二区| 成人日韩熟女高清视频一区| 男人的天堂精品国产一区| 亚洲AV无码国产一区二区三区 | 中文字幕日本一区| 国产aⅴ精品一区二区三区久久| 无码av免费毛片一区二区| 中文字幕在线一区二区在线| 无码毛片视频一区二区本码| 伊人激情AV一区二区三区| 国模大尺度视频一区二区| 国产精品无码不卡一区二区三区 | 日韩精品午夜视频一区二区三区| 亚洲一区二区三区精品视频| 人体内射精一区二区三区| 久久精品亚洲一区二区| 中文字幕人妻丝袜乱一区三区 | 亚洲av片一区二区三区| 精品一区二区三区无码免费直播 | 久久se精品一区二区| 久久中文字幕一区二区| 无码精品国产一区二区三区免费| 国产成人精品一区二区三区免费| 波多野结衣一区二区三区aV高清 | 亚洲国产成人久久一区二区三区 | 亚洲一区二区三区香蕉| 国产激情无码一区二区app| 亚洲国产成人一区二区精品区| 精品国产AV一区二区三区| 手机福利视频一区二区| 日本中文字幕在线视频一区| 国产A∨国片精品一区二区 | 亚洲一区中文字幕在线电影网|