エラー概要 PHP - 常に更新 (初心者は必読)
開発用にすべてのエラー プロンプトを有効にしてください: error_reporting = E_ALL |
エラープロンプトをブロックすることは、耳を塞いでベルを盗むことに等しい。標準化された方法でコードを書くと、エラーが半分に減ります。
1: 変数を取得できないのはなぜですか
ある Web ページから別の Web ページにデータ名を POST しましたが、$name を出力しても値を取得できないのはなぜですか?
PHP4.2以降のバージョンでは、register_globalのデフォルトはoffになります
別のページから送信された変数を取得したい場合:
方法 1: PHP.ini で register_global を見つけて、on に設定します。
方法 2: この extract($_POST);extract($_GET); を受信 Web ページの先頭に配置します (extract($_SESSION) の前に Session_Start() が必要であることに注意してください)。
方法 3: $a=$_GET["a"]; $b=$_POST["b"] を 1 つずつ読み込む方法です。面倒ではありますが、より安全です。
2: プログラムをデバッグする実行時に特定の変数の値を知っておく必要があります。これが私がやったことです。次の内容のファイルdebug.phpを作成します:
Ob_Start();
Session_Start();
Echo ""; Echo "このページで取得した _GET 変数は次のとおりです:"; Echo "このページで取得した _POST 変数は次のとおりです:";ページは:"; Print_R($_GET); Echo "このページで取得された _POST 変数は次のとおりです:"; COOKIE 変数は次のとおりです: "; Print_R($_COOKIE); Echo "このページで取得された _SESSION 変数は次のとおりです: "; Print_R($_SESSION); エコー "";
次に、php.iniにinclude_path = "c:/php"を設定し、このフォルダーにdebug.phpを置きます、
将来的には、このファイルを各 Web ページに含めて、取得した変数名と値を表示できるようになります。
3:セッションの使い方
セッションに関連するものはすべて、関数 session_start(); を呼び出す必要があります。
セッションに対する価値の支払いは次のように非常に簡単です:
PHPコード:---------------------------------------------- --- ------------------
[php]
Session_start();
$Name = "これはセッションの例です";
Session_Register("Name");//Session_Register("$Name"); と書かないでください。
エコー $_SESSION["名前"];//$_SESSION["Name"] は「これはセッションの例です」になります
[/php]
------------------------------------------------- - -----------------
php4.2 以降では、セッション料金を直接支払うことができます:
PHPコード:---------------------------------------------- --- -------
[php]
Session_Start();
$_SESSION["名前"]="値";
[/php]
------------------------------------------------- - ------
次のようにセッションをキャンセルできます:
PHPコード:---------------------------------------------- --- -------
[php]
session_start();
session_unset();
session_destroy();
[/php]
------------------------------------------------- - ---------------------------------
php4.2以降では、特定のセッション変数のキャンセルにバグがあります。
注意:
1: Session_Start() を呼び出す前に出力を行うことはできません。たとえば、以下は間違っています。
==========================================
1行
2行[php]
3行 Session_Start();//1行目は前に既に出力がありました
4行……
5行[/php]
==========================================
ヒント 1:
「....headers 既に送信されました...」が表示される場合は、Session_Start() の前に情報がブラウザに出力されていることを意味します。
出力を削除すれば正常になります(COOKIEでもこのエラーが発生します。エラーの原因は同じです)ヒント 2:
Session_Start() がループステートメント内に配置されており、情報が以前にブラウザーに出力された場所を特定するのが難しい場合は、次の方法を使用できます。
1行 [php] Ob_Start() [/php]
…..これがあなたのプログラムです…
2: このエラーは何ですか
警告: session_start(): open(/tmpsess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) が失敗しました:....
セッションファイルの保存パスを指定していないためです。
解決策:(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");
[/php]
-----------------------------------------------
receive.phpの内容:
PHPコード:--------------------------------
[php]
エコー ""; エコー "";
[/php]------------------------------------------------
正しい方法は次のとおりです:
PHPコード:---------------------------------
[php]
$Var="hello php";
$post= "receive.php?Name=".urlencode($Var);
header("location:$post");
[/php]
------------------------------------------------- - ---------------------------------
受信ページで Urldecode() を使用する必要はなく、変数は自動的にエンコードされます。
5:「[/php]」で終わらない指定長の漢字をインターセプトし、超過部分を「...」に置き換える方法
一般的に言えば、インターセプトされる変数が Mysql からのものである場合、まずフィールドの長さが十分な長さであることを確認する必要があります。通常は char(200) で、句読点を含めて 100 文字の中国語文字を保持できます。
PHPコード:---------------------------------------------- -----------------------------------
[php]
$str="この文字はとても長いです^_^";
$Short_Str=showShort($str,4);//最初の 4 つの中国語文字をインターセプトし、結果は次のようになります: この文字...
「$Short_Str」をエコーします;
関数 csubstr($str,$start,$len)
{
$strlen=strlen($str);
$clen=0;
for($i=0;$i
{
if ($clen>=$start+$len)
休憩;
if(ord(substr($str,$i,1))>0xa0)
{
if ($clen>=$start)
$tmpstr.=substr($str,$i,2);
$i++;
}
その他
{
if ($clen>=$start)
$tmpstr.=substr($str,$i,1);
}
}
$tmpstr;を返す
}
関数 showShort($str,$len)
{
$tempstr = csubstr($str,0,$len);
if ($str$tempstr)
$tempstr .= "..." //終わりたい内容をここで変更するだけです
;$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コード:---------------------------------------------- -----------------------------------
[php]
$str="
PHP
「;
」エコー「説明: ".$str."
」処理済み: ";
Echo htmlentities(nl2br($str));
[/php]
------------------------------------------------- - ---------------------------------
8:関数内で関数外の変数値を取得する方法
PHPコード:---------------------------------------------- -----------------------------------
[php]
$a="PHP";
ふー();
関数foo()
{
global $a;//これを削除して結果を確認してください
「$a」をエコーします;
}
[/php]
------------------------------------------------- - ---------------------------------
9: システムがデフォルトでサポートしている機能を知るにはどうすればよいですか
PHPコード:---------------------------------------------- -----------------------------------
[php]
$arr = get_define_functions();
関数 php() {
}
echo ""; Echo "システムでサポートされているすべての関数とカスタム関数 phpn";
[/php]
------------------------------------------------- - ---------------------------------
10: 2つの日付の差を比較する方法
PHPコード:---------------------------------------------- -----------------------------------
[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 日間苦労しました^_^」;
[/php]
------------------------------------------------- - ---------------------------------
11: PHP をアップグレードした後、元のプログラムが全画面表示されるのはなぜですか 注意: 未定義の変数:
これは、未定義の変数が原因で発生する警告です。
php.iniを開き、一番下にあるerror_reportingを見つけて、error_reporting = E_ALL & ~E_NOTICEに変更します
解析エラーの場合
error_reporting(0) を閉じることができません。
エラー プロンプトをオフにしたい場合は、php.ini を開き、display_errors を見つけて、display_errors = Off に設定します。
今後、エラーは表示されません。それでは、error_reportingとは何でしょうか?
12: ファイルの先頭と末尾にファイルを追加したいのですが、いちいち追加するのは非常に面倒です
。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;
auto_append_file = auto_append_file.phpを最後に添付します
今後、各 php ファイルは
と同等になります。PHPコード:---------------------------------------------- -----------------------------------
[php]
「auto_prepend_file.php」をインクルードします ;
…//プログラムはこちらです
「auto_append_file.php」をインクルードします;
[/php]
------------------------------------------------- - ---------------------------------
13: PHPを使用してファイルをアップロードする方法
PHPコード:---------------------------------------------- -----------------------------------
[php]
ファイルを選択してください:
$upload_file=$_FILES['upload_file']['tmp_name'];
$upload_file_name=$_FILES['upload_file']['name'];
if($upload_file){
$file_size_max = 1000*1000;//1M制限ファイルアップロード最大容量(バイト)
$store_dir = "d:/";// アップロードしたファイルの保存場所
$accept_overwrite = 1;//同じファイルの上書きを許可するかどうか
// ファイルサイズを確認する
if ($upload_file_size > $file_size_max) {
echo "申し訳ありませんが、ファイル サイズが指定されたサイズよりも大きいです";
退出;
}
// ファイルの読み取りと書き込みをチェックします
if (file_exists($store_dir . $upload_file_name) && !$accept_overwrite) {
Echo "同じファイル名のファイルが存在します";
退出;
}
//指定したディレクトリにファイルをコピーします
if (!move_uploaded_file($upload_file,$store_dir.$upload_file_name)) {
echo "ファイルのコピーに失敗しました";
退出;
}
}
エコー「
」ファイルをアップロードしました:";
echo $_FILES['upload_file']['name'];
エコー「
」「;
」//クライアントマシンファイルの元の名前。
Echo "ファイルの MIME タイプは次のとおりです:";
echo $_FILES['upload_file']['type'];
//ファイルの MIME タイプ。ブラウザがこの情報をサポートする必要があります (「image/gif」など)。
エコー「
」「;
」エコー「アップロードファイルサイズ:」;
echo $_FILES['upload_file']['size'];
//アップロードされたファイルのサイズ(バイト単位)。
エコー「
」「;
」Echo "ファイルがアップロードされた後、次のように一時的に保存されます。";
echo $_FILES['upload_file']['tmp_name'];
//ファイルのアップロード後にサーバーに保存される一時ファイル名。
エコー「
」「;
」$Error=$_FILES['upload_file']['error'];
スイッチ($エラー){
ケース0:
「アップロード成功」をエコーします;
ケース1:
Echo "アップロードされたファイルは、php.ini の Upload_max_filesize オプションの制限を超えています。";
ケース2:Echo "アップロードされたファイルのサイズが、HTML フォームの MAX_FILE_SIZE オプションで指定された値を超えています。";
ケース3:
Echo "ファイルの一部のみがアップロードされました";break;
ケース4:
Echo "ファイルはアップロードされていません";break;
}
[/php]
------------------------------------------------- - ---------------------------------
14: GDライブラリの設定方法
以下は私の設定プロセスです
1: dos コマンドを使用します (手動でも実行でき、dlls フォルダー内のすべての dll ファイルを system32 ディレクトリにコピーします) copy c:phpdlls*.dll c:windowssystem32
2: php.iniを開きます
extension_dir = "c:/php/extensions/";を設定します
3:
extension=php_gd2.dll; php_gd2.dll がない場合は、このファイルが存在することを確認してください。 c:/php/extensions/php_gd2.dll。
4: 次のプログラムを実行してテストしますPHPコード:---------------------------------------------- -----------------------------------
[php]
Ob_end_flush();
//これ以前はブラウザに情報を出力できないので、auto_prepend_file が設定されているかどうかに注意してください。
header ("Content-type: image/png");
$im = @imagecreate (200, 100)
さもなければ死ぬ (「イメージを作成できません」);
$background_color = imagecolorallocate ($im, 0,0, 0);
$text_color = imagecolorallocate ($im, 230, 140, 150);
imagestring ($im, 3, 30, 50, "単純なテキスト文字列", $text_color);
imagepng ($im);
[/php]
------------------------------------------------- - ---------------------------------
15: UBBコードとは
UBB コードは HTML の一種であり、Ultimate Bulletin Board (中国の多くの場所でも使用されている海外の BBS プログラム) で使用される特別なタグです。
HTML の使用が禁止されている場合でも、UBBCode を使用できますか? フォーラムで HTML の使用が許可されている場合でも、使用するコードが少なく安全なため、HTML の代わりに UBBCode を使用することを選択しますか?
Q3boy の UBB にはサンプルがあり、テストを直接実行できます16: MySQLのユーザーとパスワードを変更したいです
まず最初に言っておきますが、ほとんどの場合、MySQL を変更するには mysql の root 権限が必要です。
そのため、一般ユーザーは管理者に依頼しない限りパスワードを変更することができません。
方法1phpmyadmin を使用します。これが最も簡単です。mysql ライブラリのユーザー テーブルを変更します。
ただし、PASSWORD機能を使うことを忘れないでください。
方法 2
mysqladmin を使用する場合、これは前述した特殊なケースです。
mysqladmin -u root -p パスワード mypasswd
このコマンドを入力した後、root の元のパスワードを入力する必要があります。root のパスワードは mypasswd に変更されます。
コマンド内のrootを自分のユーザー名に変更すると、自分のパスワードを変更できます。
もちろん、mysqladmin が mysql サーバーに接続できない場合、または mysqladmin を実行できない場合は、
そうするとこの方法は無効です。
そしてmysqladminはパスワードをクリアできません。
以下のメソッドはすべて mysql プロンプトで使用され、mysql root 権限が必要です:
方法 3
mysql> INSERT INTO mysql.user (ホスト,ユーザー,パスワード)
VALUES('%','jeffrey',PASSWORD('ビスケット'));
mysql>フラッシュ権限
正確に言うと、これはユーザーの追加で、ユーザー名は jeffrey 、パスワードは biscuit です。
「mysql中国語リファレンスマニュアル」にこの例があったので書き出してみました。
PASSWORD機能を使用してからFLUSH PRIVILEGESを使用することに注意してください。
方法 4
方法3と同じですが、REPLACEステートメントを使用するだけです
mysql> mysql.user (ホスト、ユーザー、パスワード) に置き換えます
VALUES('%','jeffrey',PASSWORD('ビスケット'));
mysql>フラッシュ権限
方法5
SET PASSWORD ステートメントを使用します。
mysql> jeffrey@"%" = PASSWORD('biscuit');のパスワードを設定
PASSWORD() 関数も使用する必要があります。
ただし、FLUSH PRIVILEGESを使用する必要はありません。
方法6
GRANT...IDENTIFIED BY ステートメントの使用
mysql> 'biscuit' によって識別された jeffrey@"%" に *.* の使用を許可します。
ここではPASSWORD()関数は不要ですし、FLUSH PRIVILEGESを使う必要もありません。
注: PASSWORD() は、Unix パスワード暗号化と同じ方法でパスワード暗号化を実行します [ではありません]。
17: 彼がどの Web サイトを介してこのページに接続したのか知りたいです。
PHPコード:---------------------------------------------- -----------------------------------
[php]
//出力するにはスーパーコネクション経由で入力する必要があります
エコー $_SERVER['HTTP_REFERER'];
[/php]
------------------------------------------------- - ---------------------------------
18: データをデータベースに入れたり、取り出してページに表示する際に注意すべきことは何ですか
保管するとき
$str=addslashes($str);
$sql="`タブ` (`コンテンツ`) の値('$str')に挿入";
倉庫から出るとき
$str=ストリップスラッシュ($str);
表示時
$str=htmlspecialchars(nl2br($str)) ;
19: 現在のアドレスバー情報の見方
PHPコード:---------------------------------------------- -----------------------------------
[php]
$s="http://{$_SERVER['HTTP_HOST']}:{$_SERVER["SERVER_PORT"]}{$_SERVER['SCRIPT_NAME']}";
$se=”;
foreach ($_GET as $key => $value) {
$se.=$key."=".$value."&";
}
$se=Preg_Replace("/(.*)&$/","$1",$se);
$se?$se="?".$se:"";
echo $s."?$se";
[/php]
------------------------------------------------- - ---------------------------------
20: 戻るボタンをクリックしたのですが、前に入力した内容が消えたのはなぜですか?
セッションを使ったからです解決策:
PHPコード:---------------------------------------------- -----------------------------------
[php]
session_cache_limiter('private,must-revalidate');
session_start();
…………
…………
[/php]
------------------------------------------------- - -------------------------
21: 写真にIPアドレスを表示する方法
PHPコード:---------------------------------------------- -----------------------------------
[php]
Header("Content-type: image/png");
$img = ImageCreate(180,50);
$ip = $_SERVER['REMOTE_ADDR'];
ImageColorTransparent($img,$bgcolor);
$bgColor = ImageColorAllocate($img, 0x2c,0x6D,0xAF); // 背景色
$shadow = ImageColorAllocate($img, 250,0,0); // 影の色
$textColor = ImageColorAllocate($img, oxff,oxff,oxff); // フォントの色
ImageTTFText($img,10,0,78,30,$shadow,"d:/windows/fonts/Tahoma.ttf",$ip); //背景を表示
ImageTTFText($img,10,0,25,28,$textColor,"d:/windows/fonts/Tahoma.ttf","your ip is".$ip); // IP を表示します
ImagePng($img);
imagecreatefrompng($img);
ImageDestroy($img);
[/php]
------------------------------------------------- - ---------------------------------
22: ユーザーの実際のIPを取得する方法
PHPコード:---------------------------------------------- -----------------------------------
[php]
関数 iptype1 () {
if (getenv("HTTP_CLIENT_IP")) {
return getenv("HTTP_CLIENT_IP");
}
その他 {
「なし」を返します;
}
}
関数 iptype2 () {
if (getenv("HTTP_X_FORWARDED_FOR")) {
return getenv("HTTP_X_FORWARDED_FOR");
}
その他 {
「なし」を返します;
}
}
関数 iptype3 () {
if (getenv("REMOTE_ADDR")) {
return getenv("REMOTE_ADDR");
}
その他 {
「なし」を返します;
}
}
関数ip() {
$ip1 = iptype1();
$ip2 = iptype2();
$ip3 = iptype3();
if (isset($ip1) && $ip1 != "none" && $ip1 != "unknown") {
$ip1 を返す;
}
elseif (isset($ip2) && $ip2 != "none" && $ip2 != "unknown") {
$ip2を返す;
}
elseif (isset($ip3) && $ip3 != "none" && $ip3 != "unknown") {
$ip3 を返す;
}
その他 {
「なし」を返します;
}
}
Echo ip();
[/php]
------------------------------------------------- - ---------------------------------
23: データベースから3日以内にすべてのレコードを読み取る方法
まず、時間を記録するためにテーブルに DATETIME フィールドが必要です。
形式は「2003-7-15 16:50:00」です
SELECT * FROM `xltxlm` WHERE TO_DAYS(NOW()) - TO_DAYS(`date`) 24: Mysqlデータベースにリモート接続する方法
mysqlテーブルにユーザーを追加するためのhostフィールドがあるので、それを「%」に変更するか、接続を許可するIPアドレスを指定することで、リモート呼び出しができるようになります。
$link=mysql_connect("192.168.1.80:3306","root","");
25: 正規表現の使い方
ここをクリック
正規表現の特殊文字
26: Apacheを使用するとホームページが文字化けしてしまいます
方法 1:
AddDefaultCharset ISO-8859-1 を AddDefaultCharset off に変更しました
方法 2:
AddDefaultCharset GB2312
=============================================== = =======
ヒント:
コードを投稿すると、GB2312 は ??????
として解釈されます
こう変えればこうはなりませんGB2312
10: 2 つの日付間の日数を比較する方法 (より単純なアルゴリズム)
PHPコード:---------------------------------------------- -----------------------------------
[php]
$Date_1="2003-7-15";//次のようにすることもできます:$Date_1="2003-7-15 23:29:14";
$Date_2="1982-10-1";
$d1=strtotime($Date_1);
$d2=strtotime($Date_2);
$Days=round(($d1-$d2)/3600/24);
エコー「$Days 日間苦労しました^_^」;
[/php]
------------------------------------------------- - ---------------------------------
27: 受付ページでシングルクォーテーションやダブルクォーテーションが('")になるのはなぜですか
解決策:
方法 1: php.ini で magic_quotes_gpc = Off に設定します
方法 2: $str=stripcslashes($str)
28: 30秒以上経過してもプログラムを停止せずに実行し続ける方法
set_time_limit(60)//最大実行時間は1分です
set_time_limit(0)//プログラムが自動的に終了するまで実行するか、手動で停止します
29: 現在オンラインになっている人の数を計算します
例1:テキストを使った実装
PHPコード:---------------------------------------------- -----------------------------------
[php]
//まずファイルの読み書き権限が必要です
//このプログラムは、初めてエラーが報告された場合でも、将来的には動作します
。$online_log = "count.dat" //人数を保存するファイル,
;$timeout = 30; // 30秒以内にアクションがなければオフラインとみなされます
$entries = file($online_log);
$temp = array();
for ($i=0;$i
$entry =explode(",",trim($entries[$i]));
if (($entry[0] != getenv('REMOTE_ADDR')) && ($entry[1] > time())) {
array_push($temp,$entry[0].",".$entry[1]."n"); //他の視聴者の情報を取得し、タイムアウトしたものを削除して$tempに保存します
}
}
array_push($temp,getenv('REMOTE_ADDR').",".(time() + ($timeout))."n"); // 視聴者の時間を更新します
$users_online = count($temp) //オンラインの人数を計算します
;$entries = implode("",$temp);
//ファイルを書き込む
$fp = fopen($online_log,"w");
flock($fp,LOCK_EX); //flock() は NFS やその他のネットワーク ファイル システムでは正しく動作しません
fputs($fp,$entries);
flock($fp,LOCK_UN);
fclose($fp);
echo "現在存在します".$users_online."人々はオンラインです";
[/php]
------------------------------------------------- - ---------------------------------
例2:
データベースを使用してオンライン ユーザーを実装する
30: テンプレートとは何か、その使い方
テンプレートに関する記事がいくつかあります
phplibテンプレートを使用しています
これらの関数のいくつかの使用法を以下に示します
$T->Set_File("任意の定義","テンプレートファイル.tpl");
$T->Set_Block("set_fileで定義"," ","好きなように定義してください");
$T->Parse("Set_Block で定義されています"," ",true);
$T->Parse("結果を自由に出力", "Set_Fileで定義");
ループ形式を次のように設定します:
テンプレートから静的Webページを生成する方法
PHPコード:---------------------------------------------- -----------------------------------
[php]
//ここでphplibテンプレートを使用します
……
……
$tpl->parse("output","html");
$output = $tpl->get("output");// $output は Web ページのコンテンツ全体です
関数 wfile($file,$content,$mode='w') {
$oldmask = umask(0);
$fp = fopen($file, $mode);
if (!$fp) return false;
fwrite($fp,$content);
fclose($fp);
umask($oldmask);
true を返す;
}
// ファイルに書き込む
Wfile($FILE,$output);
header("location:$FILE");//生成されたWebページにリダイレクトします
}
[/php]
------------------------------------------------- - ---------------------------------
phplibのダウンロードアドレス、smartyのダウンロードアドレス
31: phpを使って文字を解釈する方法
例: 2+2*(1+2) を入力すると、自動的に 8 が出力されます
eval関数が使えます
PHPコード:---------------------------------------------- -----------------------------------
[php]
$str=$_POST['str'];
eval("$o=$str;");
エコー「$o」;
[/php]
------------------------------------------------- - ---------------