ホームページ >バックエンド開発 >PHPチュートリアル >PHPの面接の質問1
1. フォームの get 送信メソッドと post 送信メソッドの違いは何ですか?
: get は HTTP プロトコルを通じてリクエストを送信し、URL パラメーターの送信を通じて受信しますが、post はエンティティ データであり、大規模なデータを送信できます。フォームを介した情報量
2. セッションと Cookie の違いは?
session: ユーザーがアクセスするグローバル一意の変数を、サーバー上の PHP によって指定されたディレクトリ (session_dir) に保存します。連続したセッションを保存する場合はクライアントに保存され、Cookie の場合はユーザーの WIN の Temp ディレクトリに保存されます。
両方とも時間の長さを設定できます
3. データベース内のトランザクションとは何ですか?
トランザクションは、単位としてのデータベース操作の順序付けされたセットです
グループ内のすべての操作が成功した場合、 1 つの操作だけが失敗した場合でも、トランザクションは成功したとはみなされません。
すべての操作が完了し、トランザクションがコミットされると、その変更は他のすべてのデータベース プロセスに影響します。操作が失敗した場合、トランザクションはロールバックされ、トランザクション内のすべての操作の効果はキャンセルされます。
1. PHP を使用して、前日の時刻形式を出力します: 2006-5-10 22:21:21
echo date('Y-m-d H:i:s', strtotime('-1 days')) ;
2 、echo()、print()、print_r() の違い
echo は PHP ステートメント、print と print_r は関数、ステートメントには戻り値がありません、そして関数は戻り値を持つことができます (役に立たない場合)
Print() は単純型変数 (int、string など) の値を出力することしかできません
Print_r() は複合型変数 (配列、オブジェクトなど) の値を出力できます
echo 1 つ以上の文字列を出力します
3. HTML と PHP を使用できる 使用するテンプレートを分離します
Smarty、Dwoo、TinyButStrong、Template Lite、Savant、phemplate、 、文字列反転を実現するにはどうすればよいですか?
echo strrev($a) ;
7. MYSQL データベースを最適化する方法
#最も適切なフィールド属性を選択し、定義されたフィールドの長さを可能な限り短くし、フィールドを NOT NULL に設定するようにしてください
例: '地方、性別'、enum に設定するのが最善です
#Use join to query:
A. 注文のない顧客を削除: CustomerInfo Where Customer から削除 b. 注文のないすべての顧客を抽出: SELECT FROM customerinfo WHERE customerid NOT in (SELECT customerid FROM) orderinfo)
c. b の速度の最適化を改善します: SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid
WHERE orderinfo.customerid IS NULL#手動で作成した一時テーブルを置き換えるにはユニオン (UNION) を使用します
a. 一時テーブルを作成します: SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`
#データの整合性を確保するためのトランザクション処理
修 たとえば、追加と変更中に両方が確立され、1 つの失敗が失敗します
mysql_query ("begin"); mysql_query("SELECT * FROM `orderinfo` where customerid=".$id"); いくつかの計算を通じて初期データを取得するステートメントは、UPDATE ステートメントを使用して新しい値をテーブルに更新します。 Write キーワードを含む R w Lock Table ステートメントは、UNLOCK TABLES コマンドが実行される前に、Inventory
("Lock Table Customerinfo Read, orderinfo) の操作を挿入、更新、または削除するための他のアクセスがないことを保証できます。 WRITE");
mysql_query("SELECT customerid FROM `customerinfo` where id=".$id); L q mysql_query ("ロック解除テーブル");
#外部キーを使用し、ロックテーブルを最適化します
A.任何一条没有合法的customerid的记录不会写到orderinfo里
CREATE TABLE customerinfo
(
customerid INT NOT NULL,
PRIMARY KEY(customerid)
)
TYPE = INNODB;
CREATE TABLE orderinfo
(
orderid INT NOT NULL,
customerid INT NOT NULL,
PRIMARY KEY(customerid,orderid),
FOREIGN KEY (customerid) REFERENCES customerinfo
(customerid) ON DELETE CASCADE
)
TYPE = INNODB;
注意:'ON DELETE CASCADE',该参数保证当customerinfo表中的一条记录删除的话同时也会删除order
表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;
#建立索引
a.格式:
(普通索引)->
创建:CREATE INDEX b493f009a433abb929a361542484fbbf ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))
(唯一索引)->
创建:CREATE UNIQUE b493f009a433abb929a361542484fbbf ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))
(主键)->
它是唯一索引,一般在创建表是建立,格式为:
CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
#优化查询语句
a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作
例子1:
SELECT * FROM order WHERE YEAR(orderDate)70ba1e80d429804614c95e34aaee8c3d="good" and name82925327722c9f1bbcb9b2b47dc9d023$length)
{
$str=null;
$len=$start+$length;
for($i=$start;$i93b5b43b397c636e57d17a144ddde6130xa0)
{
$str.=substr($string,$i,2);
$i++;
}else
{
$str ... サーバーのハードウェアが現在のトラフィックをサポートするのに十分であるかどうかを確認します
データベースの読み取りと書き込みを個別に実行し、データ テーブルを最適化します
プログラム機能のルール
外部ホットリンクの禁止
ダウンロードの制御大きなファイル
メインのトラフィックを迂回するには別のホストを使用します
13. PHP を使用して、クライアント IP とサーバー IP を表示するコードを作成します
クライアント IP を出力します: echo $_SERVER['REMOTE_ADDR'] または: getenv ('REMOTE_ADDR');
サーバー IP を出力します: echo gethostbyname(" www.bolaiwu.com ")
16、同じファイルを複数インクルードすることを避けるため、(? ) ステートメントはそれらを置き換えることができますか? プロセスに require を追加すると、条件が true かどうかに関係なく、require が最初に実行されます
include->include には戻り値がありますが、require には戻り値がありません (おそらく require が include よりも速いためです)
注: インクルードされたファイルが存在しないか、構文が間違っています。 require が致命的である場合、 include はそうではありません
17. SESSION の有効期間を変更する方法
方法 1: php.ini の session.gc_maxlifetime を 9999 に設定し、 apache を再起動します
方法 2: $savePath = " ./session_save_dir/" ;
$ Lifetime = Hive* 秒;
方法 3: setcookie () および session_set_cookie_params ($ lifetime );
18 PHP Development Resource Network のホームページのような Web ページのアドレスがあります: http://www.phpres.com/index.html、そのコンテンツを取得するにはどうすればよいですか?
方法 1 (PHP5 以降の場合)バージョン):
$readcontents = fopen("http://www.phpres.com/index.html", "rb");
方法 2:
echo file_get_contents("http://www.phpres. com/index.html");
19. HTTP 1.0 では、ステータス コード 401 の意味は (?)、「ファイルが見つかりません」というプロンプトが返された場合、ヘッダー関数を使用でき、そのステートメントはis (?) ); (2 点)
12. PHP では、ヒアドキュメントは特別な文字列です。 (1 点)
答え: ヒアドキュメントの構文は、「58a60bf70adf9381ad85ad86b1ec0a782cacc6d41bbb37262a98f745aa00fbf0
23. foo() と @foo() の違いは何ですか? (1 点)
答え: @foo() はエラー出力を制御します
24. メソッドと属性なしで「myclass」という名前のクラスを宣言する方法 (1) point)
答え: class myclass{ }
25. 「myclass」という名前のオブジェクトをどのようにインスタンス化しますか? (1 点)
答え: new myclass()
26.クラスの属性を設定しますか? (2 点) )
答え: $object = new myclass();
$newstr = $object->test;
$object->test = "info";
27、mysql_fetch_row() と mysql_fetch_array の違いは何ですか? (1 点)
答え: mysql_fetch_row は、結果セットから列挙型として配列の行を取り出すことです
Mysql_fetch_array は、結果セットからの配列を連想配列または数値配列として使用します。
28. GD ライブラリは何に使用されますか? (1 点)
回答: gd ライブラリは、画像を処理するための一連の API を提供します。 GD ライブラリを使用して画像を処理したり、画像を生成したりできます。
Web サイトでは、通常、GD ライブラリは、サムネイルの生成、画像への透かしの追加、または Web サイト データに関するレポートの生成に使用されます。
29. PHP に HTML コードを入力するいくつかの方法を指摘します。 (1 点)
答え: echo "f4971551a74c039d1b0fe98c7e20507daaa5db79b134e9f6b82c0b36e0489ee08ed";
30. ファイルを読み書きできる関数は次のうちどれですか? ? (1 点)
(a) fget() (b) file_open() (c) fopen() (d) open_file() [ c ]
31. users 配列内?(1点)
(a) $users[] = 'john';
(b) array_add($users,'john');
(c) array_push($users,'john ') ;
(d) $users ||= 'john'; [ a , c ]
32. 次のプログラムは (1 点) を入力しますか?
$num = 10;
関数は乗算しますか? ) {
$num = $num * 10;
}
multiply();
Echo $num;
?>
出力: 10
33. PHP を使用して、「Zhang San」という名前のすべてのコンテンツを見つけて出力する簡単なクエリを作成します (2 点)
表name User
Name Tel Content Date
Zhang San 13333663366 大学卒業 2006-10-11
Zhang San 13612312331 学部卒業 2006-10-15
Zhang Si 021-55665566 工業高校卒業2006 -10-15
上記の質問を完了するには、コードに従ってください:
$mysql_db=mysql_connect("local","root","pass");
@mysql_select_db("DB",$mysql_db);
$result = mysql_query( "SELECT * FROM `user` WHERE name='Zhang San'");
while($rs = mysql_fetch_array($result)){
echo $rs["tel"].$rs["content"]。 $rs[" date"];
}
34. 次のクラスの使い方とその意味を説明します (3)
クラス test{
function Get_test($num){
($ num)."En");
return $num;
}
}
Answer:$testnum = "123";
$object = new test();
$encrypt = $object -> ;Get_test($testnum);
echo $encrypt;
クラス test には Get_test メソッドが含まれており、インスタンス化されたクラスは複数文字列暗号化のメソッドを呼び出します
35 SQL ステートメントの形式を記述します。 、更新、削除 (4 点)
Name User
Name Tel Content Date
Zhang San13333663366 大学卒業 2006-10-11
Zhang San13612312331 学部卒業 2006-10-15
張思 021-55665566 工業中等学校卒業生 2006-10-15(a) 新しいレコードがあります (Xiao Wang 13254748547 高校卒業 2007-05-06) SQL ステートメントを使用してテーブル
Mysql_query("INSERT INTO `user) に追加してください。 ` (name,tel,content ,date) VALUES
('Xiao Wang','13254748547','High School Graduation','2007-05-06')")
(b) SQL ステートメントを使用してくださいZhang San の時間を現在のシステム時間に更新するには
$nowDate = date("Ymd");
mysql_query("UPDATE `user` SET date='".$nowDate."' WHERE name='Zhangshan'") ;
(c ) Zhang Si という名前のすべてのレコードを削除するには書き込んでください
Mysql_query("DELETE FROM `user` WHERE name='Zhang Si'");
36. データ型 (int char varchar datetime text) varchar と char の違いは何ですか (2 点)
答え: int は数値型、char は固定長の文字列、varchar は実際の長さの文字列、datetime は日時型、textは文字列
charの位置は固定 テーブル作成時に設定した長さ、varcharは可変長文字
38. 以下のプログラムの出力結果を書きます(1. point)
$b=201;
$c=40;
$a= $b>$c?4:5;
echo $a;
?>
答え: 4
39. 変数が設定されているかどうかを検出する関数は何ですか? ( 2 点)
答え: isset($str),empty($str);
40 . クエリ結果セットの合計数を取得する関数は何ですか? (1 点)
答え: mysql_num_rows($result);
41. '); 最初の要素の値(1点)を出力してください
答え: echo $array[0];
42. 質問41の配列の値を','記号で区切って結合してくださいそれらを文字列出力に変換します (1 ポイント)
答え: for($i=0;$i79ffd09343a0328f232990b60d24ad83");
プログラミングの質問:
1.できるだけ効率的に
例: 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);
return substr($url,$pos1);}
}
2. HTML 言語では、ファイルのエンコード形式を出力するために使用できます。以下は標準のメタステートメントです
標準HTMLページの同様のメタタグ内のcharset部分の値をbig5に変更する関数をPHP言語で書いてください
注意:
1.完全な処理が必要ですhtml ページ、つまりこのメタステートメントだけではありません
2. 大文字と小文字を無視します
3. ここでは ' と " は交換可能です
4. 「Content-Type」の両側の引用符は無視できますが、「text」 /html; charset=gbk ' 両側では使用できません
5. 余分なスペースの処理に注意してください
3. 2つのファイルの相対パスを計算する関数を作成します
例: $a = '/a /b/c/d/e.php' ;
$b = '/a/b/12/34/c.php';
$a に対する $b の計算された相対パスは http:/ である必要があります。 /www.cnblogs.com/c/d. ()
答え: function getRelativePath($a, $b) {
$returnPath = array(dirname($b)); を追加します。 /', $a);
$arrB =explode('/', $returnPath[0]);
for ($n = 1, $len = count($arrB); $n
if($ arra [$ n]!= $ arrb [$ n]){
$returnPath = array_merge($returnPath, array_fill(1, $len - $n, '..')) ;
return implode('/', $returnPath);
echo getRelativePath($) a, $b);
空白を埋めます:
1. PHP では、現在のスクリプトの名前 (パスとクエリ文字列は含まれません) が事前定義された変数 __$_SERVER['PHP_SELF'] に記録されます。 __; 現在のページにリンクしている URL が事前定義変数 __$_SERVER['HTTP_REFERER']__
中
2. プログラムセグメントを実行します f2a4c95c5b1a40233ff18204bca77241].*?>) ;.*?2cacc6d41bbb37262a98f745aa00fbf0/si", "newinfo", $script);
7. PHP を Apache モジュールとしてインストールします。ファイル http.conf で、まずステートメント ____ を使用して PHP を動的にロードしますモジュールを作成し、ステートメント ____ を使用して、拡張子 php を持つすべてのファイルを Apache に PHP スクリプトとして処理させます。
LoadModule php5_module "c:/php/php5apache2.dll" , AddType application/x-httpd-php .php,
8. include ステートメントと require ステートメントは、現在のファイルに別のファイルを含めることができます。 違いは次のとおりです。 ____; 同じファイルを複数回インクルードすることを避けるために、それらをステートメント __require_once||include_once__ に置き換えることができます。
9. クラスの属性をシリアル化してセッションに保存できるため、後でクラス全体を復元できます。これに使用される関数は ____ です。
10. php.ini で __allow_call_time_pass_reference boolean__ が on に設定されていない限り、関数のパラメーターは変数への参照にすることはできません
11。 。 tbl_user が学生の名前 (name) と学生番号 (ID) を記録する場合、tbl_score は学生 (一部の学生は試験後に退学になり、記録がありません)
とテストのスコア (score) ) と試験科目を記録します。 (件名)、各学生の名前と、対応する各件の合計スコアを出力したい場合は、SQL ステートメント ____ を使用できます。
12. PHP では、ヒアドキュメントは特別な文字列であり、その終了マークは____ でなければなりません。
プログラミングの質問:
13. フォルダー内のすべてのファイルとサブフォルダーを走査できる関数を作成します。
答え:
function my_scandir($dir)
{
$files = array();
:) file] = scandir($dir . "/" . $file);
: );
$files を返します。
答え:
0a438c3a03641c0770d9ced2810fef48 $rows[ categoryID ], 'parent' => $rows[categoryParentID], 'name' =>
{return "";
}
foreach($category_array[$category_id] AS $key => $category)
{
if ($category['id'] == $default_category)
{
echo "08f8f6535b3a719c6bb7cd6ad3f81eecn";
}
{
echo ">" ] . "4afa15d3069109ac30911f04c56f3338n";
}
Get_Category( $key, $level + 1, $default_category);
}
unset($category_array[$category_id]);
}
/*
関数によって返される配列形式は次のとおりです:
Array
(
[1] => Array ( [id] => 1 [name] => レベル 1 カテゴリ[レベル] => 0 [親ID] => 0 )
[4] = > 配列 ( [id] => 4 [名前] => 二次カテゴリ [レベル] => 1 [親ID] => 1 )
[9] => 配列 ( [id] => 9 [名前] => ははは [レベル] => 2 [親 ID] => 4 )
[3 ] => 配列 ( [id] => 3 [名前] => 二次カテゴリ [レベル] => 1 [親 ID] => 1 )
[8] => > 8 [名前] => aqqqqqd [レベル] => 3 )
[2] => 二次カテゴリ[レベル] => 1 [親ID] => 1 )[7] => 配列 ( [ID] => 7 [名前] => 234234 [レベル] => 2 [親ID] = > 2 )
[6] => 配列 ( [id] => 6 [名前] => 333332 [レベル] => 2 [親ID] => 2 )
[5] => ; 配列 ( [id] => 5 [名前] => 第 3 レベルのカテゴリ [レベル] => 2 [親 ID] => 2 )
[10] => 10 [名前] => 66333666 [レベル] => 3 [親ID] => ; 5)
)
*/
// 配列を返します
function category_array($ category_id = 0,$level=0)
{
global $DB;
$sql = "SELECT * FROM category ORDER BY categoryID DESC";
$result = $DB->query($sql);
while ($rows = $DB->fetch_array($result))
{
$category_array[$rows['categoryParentID']][$rows['categoryID']] = $rows;
}
foreach ($category_array AS $key=>$val)
{
if ($key == $category_id)
{
foreach ($val AS $k=>$v)
{
$options[$k] =
array(
'id' => $v['categoryID'], 'name' => $v['categoryName'], 'level' => ; $level, 'ParentID'=>$v['categoryParentID']
);
$children = category_array($k, $level+1);
if (count($children) > 0)
{
$options = $options + $children;
}
}
}
}
unset($category_array[$category_id]);
return $options ; }
?>
eb46b1f979d5ce4b8000968c273d9741 array(
'1' => array('id' => '親' => 0, '名前' => '1111'),
'2' => array('id' => 2, 'parent' => 0, 'name' => '2222'),
'4' => array('id' => 4, 'parent' => 0, 'name' => '4444')
),
array(
'3' => array('id' => 3, 'parent' => 1, 'name' => '333333'),
'5' => array('id' => 5, 'parent' => 1, '名前' => '555555')
)、
'3' => 配列(
'6' => 配列('id' => 6、'親' => 3、「名前」=> '66666'),
'7' => array('id' => 7, 'parent' => 3, 'name' => '77777')
),
'4' => array(
'8' => array('id' => 8, 'parent' => 4, 'name' => '8888'),
'9' => id' => 9, '親' => '9999')
);
if (!isset($arr[$category_id]))
{
return "";
}
foreach($arr[$category_id] AS $key =>カテ)
{
if ($cate['id'] == $default_category)
{
$txt = "41f3061326bd6e2a98e4cd31e959294d" 。 str_repeat( "-", $level ) 。 「」。 $cate['名前'] 。 "1bf14e08c6d9d2efe539db2f251ead30" 。 $cate['名前'] 。 "4afa15d3069109ac30911f04c56f3338n";
}
$val = $txt.$txt1;
echo $val;
self::Get_Category($key, $level + 1, $default_category);
}
}
function getFlush($category_id = 0,$level = 0, $default_category = 0)
{
ob_start();
self::Get_Category( $category_id ,$level, $default_category);
$out = ob_get_contents();
ob_end_clean();
return $out;
}
}
$id =$_GET[' id'];
echo "221f08282418e2996498697df914ce4e";
$c = new cate();
//$c->Get_Category();
$ttt= $c->getFlush($ id,'0','3');
echo $ttt;
echo "18bb6ffaf0152bbe49cd8a3620346341";
?>
$contents = stream_get_contents($readcontents);
fclose($readcontents );
echo $contents;