Php でよくある問題の概要
1: 変数を取得できないのはなぜですか
ある Web ページから別の Web ページにデータ名を POST したのに、$name を出力すると値が取得できないのはなぜですか?
PHP4.2 以降のバージョンでは、 register_globalデフォルトは off です
別のページから送信された変数を取得したい場合:
方法 1: PHP.ini で register_global を見つけて、それを on に設定します。
方法 2: この extract($_POST);extract( を先頭に置きます。 Web ページの受信 $_GET); (extract($_SESSION) の前に Session_Start() が必要であることに注意してください)。
方法 3: 変数を 1 つずつ読み取る $a=$_GET["a"];$b=$_POST[ "b"] など。この方法は面倒ですが、安全です。
2: プログラムをデバッグする
実行時に特定の変数の値を知る必要があります。これが私がやったことです。debug.php ファイルを作成します。その内容は次のとおりです:
PHP コード: ------------------------ -------------------------------------------------- -- --
Ob_Start();
Session_Start();
Echo "
";<br><br>Echo "このページで取得される _GET 変数は次のとおりです:";<br>Print_R($_GET) ;<br> <br>Echo "このページで取得した _POST 変数は次のとおりです:";<br>Print_R($_POST);<br><br>Echo "このページで取得した _COOKIE 変数は次のとおりです:";<br>Print_R($_COOKIE);<br><br>Echo "取得しましたこのページの _SESSION 変数は次のとおりです: ";<br>Print_R($_SESSION);<br>Echo "
";
?>
----------------- -------------------------------------------------- - -----------
次に、php.ini で include_path = "c:/php" を設定し、このフォルダーに debug.php を置きます。
今後はすべての Web ページに追加できますこのファイルをインクルードし、取得した変数名と値を表示します。
3: セッションの使用方法
セッションに関連するすべての処理は、前に関数 session_start() を呼び出す必要があります。
セッションの値の支払いは非常に簡単です。
PHPコード:---------------------------------------------- --- ----------------------------------
Session_start();
$ Name = "これはセッションの例です";
Session_Register("Name");//次のように書かないでください: Session_Register("$Name");
Echo $_SESSION["Name"];
//その後 $ _SESSION["名前"] は " これはセッションの例です"
?>
---------------------------- ----------- -------------------------------------- ---
in php4.2 その後、セッション料金を直接支払うことができます:
PHP コード:---------------------- ---------------------------------------------------- --------
Session_Start();
$_SESSION["name"]="value";
?>
---------- ---------------------------------------------------- ---------- ----
次のようにセッションをキャンセルします:
PHP コード: ------- ---------------- ---------------------------------- ----------------
< ?php
session_start();
session_unset();
session_destroy();
?>
----- ------------------- ------------------------------- ------------------- ---
php4.2以降では、特定のセッション変数のキャンセルにバグがあります。
注:
1: Session_Start() を呼び出す前に出力を行うことはできません。たとえば、以下は間違っています。
== ========================= ==============
1 行
2 行3 行目 Session_Start();//1 行目
4 行目...
5 行目の前にすでに出力があります?>
==================== ========================
ヒント1:
「...headers selected....」が表示されるたびに、Session_Start()の前にブラウザに情報を出力することになります。 (このエラーはCOOKIEでも発生します。エラーの原因は同じです)
ヒント2:
Session_Start()がループ文の中にあり、どこに情報が出力されたのか判断するのが難しい場合
Line 1
....ここでこれはあなたのプログラムです...
2: エラーは何ですか?
警告: session_start(): open(/tmpsess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) failed:....
セッション ファイルの保存先パスを指定していないためです。
解決策:
(1) C ドライブにフォルダー tmp を作成します
(2) php.ini を開き、session.save_path を見つけて、session.save_path= "c:/tmp" に変更します
4: 変数を別の Web ページに転送すると、前半だけが取得されるのはなぜですか、スペースで始まるものはすべて失われます
PHP コード:---------------------- ------------ -------------------------------------- --------
< ?php
$Var="hello php";//$Var="hello php"; に変更して結果を取得してみます
$post= "receive.php?Name =".$Var;
header("location: $post");
?>
-------------------------- ------------- ------------------------- ---
receive.php コンテンツ:
PHPコード:-------------------------------------------- -------------- ------------------------------------
< ?PHP
Echo "
" ;<br>エコー $_GET["名前"];<br>エコー "
";
?>
---------------------- --- --------------------------------------------------- --- ------------------
正しい方法は次のとおりです:
PHP コード:---------------- ---------------------------------------------------- ---- ----------
$Var="hello php";
$post= "receive.php?Name=".urlencode($Var);
header ("場所: $post");
?>
------------------------------------- ---------- --------------------------------------
受信ページにいる必要はありません Urldecode() を使用すると、変数は自動的にエンコードされます
5: "?>" で終わらずに指定された長さの中国語文字をインターセプトする方法。余分な部分は "..." に置き換えられます
一般的に言えば、変数は Mysql から取得されます。まず、フィールドの長さが十分な長さであることを確認します。通常は char(200) で、これは 100 文字の漢字を保持できます。句読点を含む
PHP コード: -------------- ---------------------------- ---------------------- ----------------
$str="これ文字が長いです^_^";
$Short_Str=showShort($str,4);//最初の 4 つの中国語文字をインターセプトし、結果は次のようになります: この文字...
Echo "$Short_Str";
Function csubstr($str,$start,$len)
{
$strlen=strlen($str);
$clen=0;
for($i=0;$i<$strlen;$i++,$clen++)
{
if ($clen>=$start+$len) )
ブレーク;
if(ord(substr($str,$i,1))>0xa0)
{
if ($clen>=$start)
$tmpstr.=substr($str,$i,2) );
$i++;
else
{
if ($clen>=$start)
$tmpstr.=substr($str,$i,1)
return $tmpstr;
関数 showShort($str,$len)
{
$tempstr = csubstr($str,0,$len);
if ($str<>$tempstr)
$tempstr .= "..." / /末尾が何であれ、ここで変更するだけです。
return $tempstr;
---------------------------- ----- -------------------------------------- -----
6: SQL ステートメントを標準化する
キーワードの誤用によるエラーが発生しないように、テーブルやフィールドの前に「`」を追加します もちろん、お勧めしません。キーワードを使用します。
例:
$Sql="INSERT INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES ('xltxlm', 'use`', 1) , 'criterion your sql string ', '2003-07-11 00:00:00')"
"`"入力方法は?TABキーです
7: Html/PHPで文字列を入力しないようにする方法形式は解釈されませんが、そのまま表示します
PHP コード:--------------------------------- ----------- -------------------------------------- -
$str="< ;h1>PHP";
Echo "解釈されました: ".$str."
処理されました:";
Echo htmlentities(nl2br($str) ));
?>
----------------------------------------------------- -------- ----------------------------------
8: 方法関数の関数外の変数値を取得します
PHP コード:------------------------------------- --------------------------------------------
$a="PHP";
foo( );
Function foo()
{
global $a;//結果を確認するにはここを削除してください
Echo "$a";
}
? >
----------- ---------------------------------- ---------------- ------------------
9: システムがどの機能をサポートしているかを知るにはどうすればよいですかデフォルト
PHP コード:-------------------------- ----------------------------- ------------------- ------------------
$arr = get_dependent_functions() ;
関数 php() {
}
echo "
"; <br>Echo "システムでサポートされているすべての関数とカスタム関数を示します";<br>print_r($arr); <br>echo "
"; ------------------------------------------------ -- --------------------------------
10: 2 つの日付の差を比較する方法
PHP コード: -------------------------------------------------- - ----------------------------------
$Date_1="2003-7- 15";// $Date_1="2003-6-25 23:29:14";
$Date_2="1982-10-1";
$Date_List_1=explode("-",$Date_1) の場合もあります);
$Date_List_2=explode("-",$Date_2);
$d1=mktime(0,0,0,$Date_List_1[1],$Date_List_1[2],$Date_List_1[0]);
$d2 =mktime(0,0 ,0,$Date_List_2[1],$Date_List_2[2],$Date_List_2[0]);
$Days=round(($d1-$d2)/3600/24);
エコー " $Days Day は苦労しました^_^";
?>
--------------------------------- -------- --------------------------------------
11: アップグレードした理由 PHP の後、元のプログラムが全画面表示されました 注意: 未定義の変数:
これは、変数が未定義であることが原因で発生する警告です。
php.ini を開き、一番下にある error_reporting を見つけます。それを error_reporting = E_ALL & ~ E_NOTICE に変更します
解析エラーの場合、error
error_reporting(0) をオフにすることはできません。
エラー プロンプトをオフにしたい場合は、php.ini を開き、display_errors を見つけて、display_errors = Off に設定します。今後のエラーは表示されません。
それは error_reporting ですか?
12: ファイルを 1 つずつ追加するのは非常に面倒です。
1: php.ini ファイルを開きます
include_path= "c:" を設定します
2: 2 つのファイル
auto_prepend_file.php と auto_append_file.php を書き込み、C ドライブに保存します。これらは自動的に先頭と末尾に添付されます。各 php ファイルの
3: php.ini で検索:
PHP ドキュメントの前後にファイルを自動的に追加します
auto_prepend_file = auto_prepend_file.php を末尾に追加します
;将来的には、各 PHP ファイルは
PHP コードと同等になります: ------- ------------------------- ------------------------- ------------------------
Include "auto_prepend_file.php" ;
....//これはあなたのプログラムです
Include "auto_append_file.php";
?>
-------- ------------------------ ------------------------ -------------------------
13: PHP を使用してファイルをアップロードする方法
PHP コード:----- ------------------------- ------------------------ -----------------
ファイルフォームをアップロード