ホームページ >バックエンド開発 >PHPチュートリアル >面接の質問を通じて PHP の短答問題を学習する

面接の質問を通じて PHP の短答問題を学習する

WBOY
WBOYオリジナル
2016-06-13 12:02:521311ブラウズ

面接の質問を通じて PHP を学習するための短い回答の質問

1、 簡単に説明してくださいecho print print_r の違いは何ですか?

答え: echoprint は実際には関数ではありません。という文法構造です。違いは、echo の戻り値が void であることと、 の場合は複数のパラメーター値を出力できることです。 print の戻り値は int (常に 1 を返します) であり、出力できる文字列値は 1 つだけです。 Print_r は出力関数です。戻り値は boolean 型です。 が指定された場合は になります。 🎜>stringinteger または float は、変数値自体を出力します。 array を指定すると、キーと要素 が特定の形式で表示され、 は配列ポインタを末尾に移動しますエッジ の場合、 reset() を使用してポインタを先頭に戻します。 object は配列に似ています。

2. htmlspecialcharshtmlentities はどう違いますか? 答え: これら 2 つの関数の機能は、特殊文字を HTML 文字エンコーディングに変換することです (特殊記号 & ' " < および > があります)。文字タグを防止します。ただし、htmlentities は、認識できない漢字を含むすべての HTML タグを変換します。

func_get_args

Func_num_args 関数。パラメータの数。②array func_get_args (void)-- この関数は、現在定義されている関数のすべてのパラメータを含む配列を返します。③mixed func_get_arg int $arg_num)-- 関数は指定された位置にあるパラメータの値を返します

4. リストしてくださいphpエラーログの処理方法。

答え: PHP 開発者は、製品が使用されたらすぐに を実行する必要があります。これらのエラーによって公開されるパス、データベース接続、データ テーブル、その他の情報によるハッカーによる攻撃を避けるために、display_errors オプションはオフになっています。プログラム内のエラー レポートをエラー ログに書き込む必要がある場合は、PHP

log_errors を追加するだけです。 > オンにするだけです。エラー レポートは、デフォルトで Web サーバーのログ ファイルに記録されます。たとえば、Apache サーバー error.log。もちろん、エラー ログを指定したファイルに記録したり、システム syslog に送信したりすることもできます。これらは次のように導入されます:

?指定したファイルを使用してエラーレポートログを記録します

指定したファイルを使用してエラーログを記録する場合は、必ずこのファイルを外部に保存してくださいドキュメントのルート ディレクトリを削除して、攻撃の可能性を減らします。また、このファイルは、

PHP スクリプトを実行するユーザー (Web サーバー プロセス所有者) によって書き込まれる必要があります。 Linux オペレーティング システムで、error.log/usr/local/ ディレクトリに 🎜> ファイルをエラー ログ ファイルとして追加し、Web サーバー プロセス ユーザーに書き込み権限を設定します。次に、PHP の構成ファイルで、error_log ディレクティブの値をこのエラー ログ ファイルの絶対パスに設定します。 php.ini の設定手順を次のように変更する必要があります: 1. error_reporting = E_ALL;

発生したすべてのエラーは

に報告されます。2. display_errors = Off; 前の ディレクティブで定義されたルールを満たすすべてのエラー レポートを表示しません??

3. ログ ステートメント記録の場所を決定します??

4. log_errors_max_len = 1024;

最大長を設定します各ログエントリ ??

5. error_log = /usr/local/error.log

生成される を指定します。 > エラーレポート 書き込まれるログファイルの場所

PHP の設定ファイルを上記のように設定したら、Web サーバーを再起動します。このようにして、PHP のスクリプト ファイルを実行すると、生成されたすべてのエラー レポートはブラウザーには表示されませんが、指定したエラー ログに記録されます /usr/local/error.log。さらに、error_reporting で定義されたルールを満たすすべてのエラーをログに記録できるだけでなく、PHP の を使用することもできます >error_log () 関数はユーザー定義のエラー メッセージを送信します。この関数のプロトタイプは次のとおりです:

1. bool error_log ( string message [, intmessage_type? [, string destination [,string extra_headers]]] )? > この関数は、エラー情報を

Web サーバー、TCP サーバーのエラー ログ ファイル、または指定されたファイルに送信します。 。関数の実行が成功した場合は TRUE を返し、失敗した場合は FALSE を返します。最初のパラメータ message は必須であり、送信されるエラー メッセージです。このパラメータのみを使用した場合、メッセージは設定ファイル php.ini で設定された場所に送信されます。 2 番目のパラメータ message_type は整数値です。0 は、オペレーティング システムのログに送信されることを意味します。 1 は、PHPMail() 関数を使用して、E -mail、4 番目のパラメータ extra_headers も使用されます。2 はエラー メッセージを送信します。 TCP サーバーに対して、3 番目のパラメータ destination は宛先 IP を表し、 ポート; 3 は、情報をファイル destination に保存します。 ②エラー情報はオペレーティング システムのログに記録されます?

エラー レポートはオペレーティング システムにも記録されますログには、オペレーティング システムが異なるとログ管理にいくつかの違いがあります。 Linux ではエラー ステートメントが

syslog に送信されますが、Windows ではエラーが送信されますイベントログに送信されます。エラー レポートをオペレーティング システム ログに書き込みたい場合は、error_log ディレクティブの値を syslog に設定できます。設定ファイル。 php.ini で変更する必要がある具体的な構成手順は次のとおりです:

1. error_reporting=E_ALL; は、発生したすべてのエラーを PHP に報告します?? 🎜>

2. display_errors = Off ;

前のコマンドで定義されたルールを満たすすべてのエラー レポートを表示しません??3. log_errors = On;

ログ ステートメントの記録場所を決定します

?? 4 . log_errors_max_len = 1024;

各ログ エントリの最大長を設定します

??5. error_log = syslog;

一般的なエラー出力に加えて、オペレーティング システムのログに書き込まれるように生成されるエラー レポートを指定します

? PHP

システム

syslog にカスタマイズされたメッセージを送信することもできます。カスタマイズされたメッセージは、以前に紹介した error_log() 関数を通じて syslog に送信することもできます。PHP は、一緒に使用する必要がある 4 つの 専用機能を提供します。これらは次のように導入されます: define_syslog_variables()? > および closelog() は 3 つの関数の前に呼び出す必要があります。この関数が呼び出されると、現在のシステム環境に基づいて次の 3 つの関数に必要な定数が初期化されるためです。 openlog() 現在のシステムでロガーへの接続を開き、システムにログ メッセージを挿入する準備をします。また、指定された最初の文字列パラメータを各ログ メッセージに挿入する際、関数はログ コンテキストで使用される 2 つのパラメータも指定する必要があります。 ?syslog() この関数は、カスタマイズされたメッセージをシステム ログに送信します。 2 つの必須パラメータが必要です。最初のパラメータは定数を指定してメッセージの優先度をカスタマイズします。たとえば、LOG_WARNING

は一般的な警告を示し、

LOG_EMERG はシステムのクラッシュを示す可能性のある重大な問題を示し、その他のいくつかは重大度を示します. 定数は公式ドキュメントを参照して使用できます。 2 番目のパラメーターは、システム ログに送信されるカスタマイズされたメッセージです。メッセージ文字列を指定する必要があります。または、実行時に PHP

エンジンによって提供されるエラー文字列を指定することもできます。

closelog() この関数は、カスタマイズされたメッセージをシステム ログに送信した後に呼び出され、openlog() 関数接続。 設定ファイルでカスタマイズされたメッセージを syslog に送信するコマンドを有効にしている場合は、前に紹介した 4 つの関数を使用して、警告メッセージをシステム ログを作成し、システムの syslog 解析ツールを使用して、PHP プログラムによって送信されたカスタマイズされたメッセージを表示および分析します。

5. を簡単に説明してください。 >include_onceが必要require_once はどう違いますか? にはが必要であり、には

答え: include

および require ステートメントには、指定されたファイル。違いは、require はコンパイル インクルードであり、インポートされている限りインクルードされ、インクルードされたファイルで例外が発生した場合は例外がスローされて停止されることです。 include が実行中のインクルードである場合のみ、インポートされたファイルがインクルードされます。インクルードされたファイルで例外が発生した場合、実行を続行するために例外をスローするにはどうすればよいですか。 ??????include_once()🎜の機能は同じですが、最初にファイルがすでに存在するかどうかを確認します含まれています。すでにインクルードされている場合、include_once

は実行されなくなります。それ以外の場合は、ファイルを含める必要があります。 Require_once()include_once() と同じであり、相違点も上記と同じです。 Php は、include が 10 ページに表示される場合に一度説明します。 倍、

および php は、require では、複数回出現するページ require が解釈されるのは 1 回だけなので、require の実行率は低くなります。 は、 を含む よりも高くなります。

6、 $_REQUEST $_POST$_GET$_COOKIE$_SESSION$_FILEそれはどういう意味ですか?

答え: それらはすべて ですPHP事前定義された変数。

??????$_REQUEST は、post または を取得するために使用されます。

??????$_POST

経由で送信された 値の取得は、post 送信された値の取得に使用されます メソッド

?????? $_GETget

??????$_COOKIE 経由で送信された値は、cookie を取得するために使用されます。 value

??????$_SESSION は、セッション ストレージを取得するために使用されます。

??????$_FILE

は、

7.

配列の添字の最適なタイプとその理由は何ですか? 答え: 数値型の方が処理が速いため、配列の添字は数値型であることが望ましいです。

8、

i および i どれがより効率的ですか?またその理由は何ですか? 答え:

ii より効率的です。なぜなら、 i には、i を返すプロセスがありません。

9,

magic_quotes_gpc, magic_quotes_runtime とはどういう意味ですか?

答え: Magic_quotes_gpc は、に設定されている場合、php 設定ファイルにあります。 は、 内のすべての ' (一重引用符 ) で自動的に POST、GET、COOKIE を実行します。 、" (二重引用符 ) (バックスラッシュ)、および NUL の はバックスラッシュで自動的にエスケープされます。

?????? magic_quotes_runtimephp 設定ファイル内にあります (on に設定されている場合) > magic_quotes_sybase の場合、データベースやテキスト セグメントなど、あらゆる形式の外部データを返すほとんどの関数は、バックスラッシュでエスケープされた引用符を使用します。 > の場合、一重引用符はバックスラッシュではなく一重引用符でエスケープされます ( 機能は PHP 5.3 以降変更されました。0 現在非推奨 は、 PHP 5.4.0)10

、あなたは正しいです

Memcach の利点は何ですか? 答え: Memcache は、動的 Web ページを解析し、一定期間内にファイルに保存するキャッシュ テクノロジです。

動的 Web ページは、データベースに再アクセスすることなく、このファイルを直接呼び出します。キャッシュの は、Web サイトのアクセス速度を向上させ、同時実行時のサーバーの負荷を軽減します。 >

?????? ? Memcache

利点: 安定性、シンプルな構成、マルチマシン分散ストレージ、高速。>11

、形式: >

get

postの違い送信メソッド内?

答え: getクライアントが URL にデータを追加した後の形式は、「」になります。 ?フィールド1=入力データ1&フィールド2= データを入力してください2&..."。パラメータを送信するとアドレスバーに get が表示されるため、セキュリティ上重大な問題が発生します。 get によって送信されるデータの量は、主に url;

????????? Post メソッドはパラメータを渡すために url を使用しません、データ量に制限がほとんどないので、大量のデータも安心して入稿できます!

12、データベース内のトランザクションとは何ですか?

答え: データベース トランザクションとは、単一の論理的な作業単位として実行される一連の操作を指します。 トランザクションにより、トランザクション単位内のすべての操作が正常に完了しない限り、データ指向のリソースが永続的に更新されないことが保証されます。関連する操作のセットを、すべて成功するかすべて失敗するユニットに結合することで、エラー回復を簡素化し、アプリケーション の信頼性を高めることができます。論理作業単位がトランザクションになるには、いわゆる ACID (原子性、一貫性、分離性、耐久性) プロパティを満たす必要があります。

13

、最適化MYSQLデータベースメソッド。 答え:

(1)データベース設計の観点からは、 適切なデータベース構造である必要があります必要な場合非正規化許可 部分的データ冗長性クエリ効率を向上させるためにJOIN 操作 を避けてください。インデックスが少ないかどうか?(2)

システムアーキテクチャ設計テーブルハッシュ大量のデータを複数の異なるテーブルにハッシュします高速テーブルと低速テーブル高速テーブルは保持するだけです最新データ遅いテーブルは履歴アーカイブです.

(3)データベースクラスターマスターサーバー読み取りおよび書き込み、スレーブサーバー読み取り専用、またはN サーバー各マシンは相互に使用されます マスター

(4)効率的な SQLステートメント,デカルト積を生成する完全結合など、非効率な SQL ステートメント があるかどうかを確認します多数のGroup By およびorder by、いいえ limit など.必要に応じて、 がデータベース ロジックを にカプセル化します。 DBMS 側のストアド プロシージャ . キャッシュ クエリ結果 、説明 それぞれ sql ステートメント

?(5)データベースから必要なデータのみを取得します,例: 記事のコメント数をクエリします、select count(*) ここで、article_id = ?以上です最初に select * where Article_id = ? を実行しないでください。次に、msql_num_rows。必要な SQL ステートメント のみを送信します。たとえば、記事の変更 ユーザーがタイトル のみを変更した場合は、 を更新します… set title = ? wherearticle_id=? (6)必要に応じて別のストレージ エンジンを使用しますたとえば、InnoDB はデッドロックを軽減できます.HEAP

はクエリ速度を 1 桁向上させることができます

.14、トラフィックが多い Web サイトの場合交通問題を解決するためにどのような方法を使用します

?

回答: サーバーのハードウェアが現在のトラフィックをサポートするのに十分であるかどうかを確認しますデータベースの読み取りと書き込みの分離データテーブルの最適化キャッシュキューの多用プログラム関数ルール静的 Web サイトを実現 外部ホットリンクを禁止大きなファイルのダウンロードを制御 別のホストを使用してメイントラフィックをオフロードします。

15、データ型 (int char varchar) を記述してくださいdatetime text) を意味します。 🎜>varcharchar 答え : int は数値型

、char

固定長文字列、varchar可変長文字列、datetime日時型、textテキスト文字列。 ????????? char は固定長型、varchar

は変数です-length タイプの違いは次のとおりです:

char(M) タイプのデータ列、各値は M バイトを占めます。長さが M より小さい場合、MySQL は右側にスペース文字で埋められます。 (埋め込まれたスペース文字は取得操作中に削除されます) varchar(M) 型のデータ列では、各値は記録に使用されるバイトに加えて必要なバイトのみを占めます。その長さ (つまり、合計の長さは L 1 バイト) です。 ?????? は、列の比較が必要かどうかを決定するために MySQL

で使用されます。 型変換ルール

1 データテーブルでは、各データ列の長さが固定されている場合、各データ行の長さも固定されます。

2

データテーブルに可変長のデータ列がある限り、各データ行の長さは可変です。

3。データ テーブル内のデータ行の長さが可変の場合、ストレージ領域を節約するために、MySQL。このデータ テーブルの固定長データ列は、対応する可変長タイプに変換されます。例外: char データ列の長さが 4 文字未満である場合、varchar には変換されません。 タイプ

提案: myisam ストレージ エンジン代わりに固定長のデータ列を使用することをお勧めします変数のデータ列の長さ。

memoryストレージ エンジン は現在、固定データ行ストレージを使用しているため、char varchar列は関係ありません。

innodb ストレージ エンジンvarchar タイプ

16、いくつかのコンパイルphp の場合に

パラメーターを構成します 答え :./configure

--prefix=/usr/local/php----- php インストールディレクトリ

–with-config-file-path=/usr/local/php/etc---- php.ini場所

--with-mysql を指定します=/usr/ local/mysql/----mysql インストール ディレクトリ、mysql

–with-mysqli=/usr/local/mysql/bin/mysql_config----mysqliファイル ディレクトリ最適化サポート

--with-jpeg-dir=/usr/local/jpeg/---- jpeg 画像のサポートをオンにします

--with-freetype -dir= /usr/local/freetype/----freetype フォント ライブラリのサポートをオンにします

--with-png-dir=/usr/local/libpng---ペアを開きます png画像サポート

--with-gd=/usr/local/gd/----gdライブラリ サポート

--with-curl=/usr/local/curl/----オープン サポートcURL ライブラリ

--with-libxml-dir=/usr/local/ libxml2 の場合/---libxml2 ライブラリ (libxml2このソフトウェア パッケージは、ユーザーが XML ファイル には、読み取り、変更、書き込み XML および HTML が含まれますファイルサポート)

--with-zlib=/usr/local/zlib/----開く zlib ライブラリのサポート (zlib は、一連の を提供するユニバーサル圧縮ライブラリです。 🎜> メモリ内の 圧縮および解凍関数、および解凍されたデータ zlib は、 gzip (.gz) 形式のファイルの読み取りと書き込みもサポートします)

--with-iconv-dir=/usr/local/libiconv/----アイコンを有効にする文字セット間の変換を実現する関数ライブラリのサポート

--with-mcrypt=/usr/local/libmcrypt/---- mcrypt 暗号化モジュールのサポートを有効にする

--with-openssl=/usr/local / openssl/----OpenSSL モジュールを有効にします。これにより、署名の生成、検証、データの暗号化と復号化が可能になります。

--with-mhash=/usr/local/mhash/--- を有効にするハッシュ関数ライブラリのサポート

--enable-gd-native-ttf----- TrueType文字列関数ライブラリ

をサポート

--enable-soap-----soap サポートを有効にする ( wenbservice)

--enable-sockets----- オープン ソケット サポート

--enable-mbstring--- -- マルチバイト、文字列のサポート

--enable-zip ----- Turn zip

--enable-fpm---- - のサポートについてPHP-FPM

--disable-debug-- のサポートを有効にする>デバッグ モードをオフにします

17、使用 mod_rewrite、 はサーバーでは使用できません/archivers/567.html この物理ファイルが index.php?id=567 にリダイレクトされたら、 を開いてください mod_rewrite.

答え: 1.有効化mod_rewriteモジュールApache2confhttpd.conf を開く :

LoadModulerewrite_module modules/mod_rewrite.so (Apache2) これです)前の #

を削除します

2. AllowOverride None を見つけて、 すべての上書きを許可。注: AllowOverride のパラメーターは ALL に設定されています。これは、次のことを意味します。サーバー全体ですべてが URL ルールの書き換えをサポートします。 Apache サーバーは、次のディレクトリにある .htaccess ファイルを読み取る必要があります。各ウェブサイトをご覧ください。そのようなファイルが存在しない場合、またはこの文書で URL 書き換えに関するルールが定義されていない場合、効果はありません。

3.別の URL の場合、APACHE

/*引用符は、ウェブ 保存ディレクトリ*/

/*

はいの場合 Linux、Web サイトのディレクトリ */

<ディレクトリ “E:/ApacheGroup/Apache2/htdocs/leapsoul”>

オプション FollowSymLinks


AllowOverride All

4.

apache サーバーを再起動し、最初に 停止してから開始

5..htaccess ファイルを配置します。ファイル名は .htaccessWindows は直接作成できません。メモ帳を使用して名前を付けて保存できます。 。注: テストしたとき、対応する .htaccess ファイルを擬似静的を必要とする各ディレクトリに保存し、同時に httpd.conf ファイルは、3 番目のように、対応する .. を追加します。ステップ。コード。 6

.htaccess の正規表現による擬似静的を必要とするページのマッピング。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。