搜尋
首頁後端開發php教程2022年最新的PHP面試題(附答案)

【相關推薦:php面試題(總結)】

1. 什麼是物件導向?主要特徵是什麼?

物件導向是程式的一種設計方式,它利於提高程式的重用性,使程式結構更加清晰。主要特徵:封裝、繼承、多型。

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:

.com: 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[&#39;action&#39;]) && $_POST[&#39;action&#39;]==’submitted’){
 $email=$_POST[&#39;email&#39;];
 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=&#39;Apple Orange Banana Strawberry&#39;; 
$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(&#39;Apple Orange Banana Strawberry&#39;),"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语句?

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=&#39;aa&#39;]“).val();
$(“input[name=&#39;aa&#39;]“).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[&#39;path&#39;],&#39;/&#39;);
$bpath=ltrim($binfo[&#39;path&#39;],&#39;/&#39;);
 
$arr=explode(&#39;/&#39;,$apath);
$brr=explode(&#39;/&#39;,$bpath);
$flag=false;
for($i=0;$i<count($arr);$i++){
 if($arr[$i]!==$brr[$i]){
  $ab[$i]=&#39;..&#39;;
  if(!$flag){
   for($j=$i;$j<count($brr);$j++){
    $bb[]=$brr[$j];
   }
   $flag=true;
  }
 }
}
$cha=array_merge($ab,$bb);
$cha=implode(&#39;/&#39;,$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)

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&#39;);
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文件中2022年最新的PHP面試題(附答案)标记中的图片地址

$url=”<img  src="/static/imghwm/default1.png"  data-src="https://www.php.cn/course/list/29/type/2.html"  class="lazy"  src=’11.jpg’/ alt="2022年最新的PHP面試題(附答案)" >”;
/<img  src="/static/imghwm/default1.png"  data-src="https://www.php.cn/course/list/29/type/2.html"  class="lazy" [\s]*src=[&#39;|\"](.*)[&#39;|\"][\s]*\/ alt="2022年最新的PHP面試題(附答案)" >/

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分)

方法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[&#39;path&#39;]);
$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[&#39;extension&#39;];
}
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="/static/imghwm/default1.png"  data-src="https://www.php.cn/course/list/29/type/2.html"  class="lazy"  src=”xxx.jpg” / alt="2022年最新的PHP面試題(附答案)" >”

请描述出两点以上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影片教學:https://www.php.cn/course/list/29/type/2.html

以上是2022年最新的PHP面試題(附答案)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:cnblogs。如有侵權,請聯絡admin@php.cn刪除
使用數據庫存儲會話的優點是什麼?使用數據庫存儲會話的優點是什麼?Apr 24, 2025 am 12:16 AM

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

您如何在PHP中實現自定義會話處理?您如何在PHP中實現自定義會話處理?Apr 24, 2025 am 12:16 AM

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

什麼是會話ID?什麼是會話ID?Apr 24, 2025 am 12:13 AM

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

您如何在無狀態環境(例如API)中處理會議?您如何在無狀態環境(例如API)中處理會議?Apr 24, 2025 am 12:12 AM

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

您如何防止與會議有關的跨站點腳本(XSS)攻擊?您如何防止與會議有關的跨站點腳本(XSS)攻擊?Apr 23, 2025 am 12:16 AM

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

您如何優化PHP會話性能?您如何優化PHP會話性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

什麼是session.gc_maxlifetime配置設置?什麼是session.gc_maxlifetime配置設置?Apr 23, 2025 am 12:10 AM

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

您如何在PHP中配置會話名?您如何在PHP中配置會話名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),