copy
<?php
print "PHP version : " . phpversion() . "<br>" ;
print "include_path : " . get_include_path() . "<br>" ;
print "get_magic_quotes : " . get_magic_quotes_gpc() . "<br>" ;
print "<HR>" ;
print "<b style='font-size:24;font-weight:bold' >Loaded_extensions</b><br>" ;
$target = get_loaded_extensions();
foreach( $target as $Key => $Value ) {
print "$Key => $Value<br>" ;
}
print "<HR>" ;
print "<b style='font-size:24;font-weight:bold' >定義済のクラス</b><br>" ;
$target = get_declared_classes ();
foreach( $target as $Key => $Value ) {
print "$Key => $Value<br>" ;
}
print "<HR>" ;
print "<b style='font-size:24;font-weight:bold' >\$_SERVER</b><br>" ;
foreach( $_SERVER as $Key => $Value ) {
print "$Key => $Value<br>" ;
}
print "<HR>" ;
print "<b style='font-size:24;font-weight:bold' >\$_ENV</b><br>" ;
foreach( $_ENV as $Key => $Value ) {
print "$Key => $Value<br>" ;
}
print "<HR>" ;
print "<b style='font-size:24;font-weight:bold' >ini_get_all</b><br>" ;
print "<PRE>" ;
$inis = ini_get_all();
print_r($inis);
print "</PRE>" ;
?>
※ 参照
copy
<?php
# 場所を変える場合は、session_start() の前に実行
session_save_path("/homepage/tmp" );
session_start();
print session_save_path() . "<br>" ;
$_SESSION['count' ]++;
print session_id() . "<br>" ;
print $_SESSION['count' ] . "<br>" ;
?>
セッション関数
copy
$str = mb_convert_encoding( $str, "UTF-8" , "eucJP-win" );
copy
mb_language( "ja" );
// 内部文字エンコーディングを設定
mb_internal_encoding("UTF-8" );
$str = mb_convert_encoding( $str, "変換後" , "変換前" );
$d : 変換後の文字列
$s : 変換前の文字列
キャラクタセット : CP932, eucJP-win, UTF-8
※ cp932 は SHIFT_JIS です。
copy
# **********************************************************
# テキストファイル一括読み込み ( 配列読みを利用 )
# FILE_IGNORE_NEW_LINES : 配列の各要素の最後に改行文字を追加しません。
# **********************************************************
function txt_get_all_array( $path ) {
$txt_array = @file( $path, FILE_IGNORE_NEW_LINES );
if ( $txt_array === FALSE ) {
return FALSE;
}
return $txt_array;
}
copy
# **********************************************************
# テキストファイル一括読み込み
# **********************************************************
function txt_get_all( $path ) {
$txt = @file_get_contents( $path );
if ( $txt === FALSE ) {
return FALSE;
}
return $txt;
}
copy
# **********************************************************
# ディリクトリリスト取得 ( 戻り値 : 配列 )
# **********************************************************
function GetDirList( $Path ) {
$ret = array();
if ( $dh = opendir( $Path ) ) {
while ( ($file = readdir($dh) ) !== false ) {
if ( filetype( $Path . "/" . $file ) == 'dir' ) {
if ( $file != "." && $file != ".." ) {
$ret[] = $file;
}
}
}
closedir( $dh );
}
return $ret;
}
<?php
$a = "この関数が実行されました";
if ( @file("test.txt") or print_r( $a ) ) {
print "OK";
}
else {
print "ERR";
}
?>
copy
<?
# @(エラー制御演算子)の使用に伴って、
# エラーメッセージを取得する為のセッティング
ini_set( "track_errors" , "1" );
# no.txt は存在しないファイル
$ret = @file( "no.txt" );
# failed to open stream: No such file or directory
# 上記メッセージがセットされている
print $php_errormsg;
# ユーザ関数にも有効
# 但し、$php_errormsg には自分でセットする
@user_error_test();
print $php_errormsg;
# ユーザ関数
function user_error_test() {
global $php_errormsg;
$message = "失敗しました" ;
$php_errormsg = $message;
trigger_error( $message, E_USER_WARNING );
return TRUE;
}
?>
copy
<?
$a = array( 0, 1, "A" , "B" );
$b = array( 1, "A" , $a );
# 2番目の引数を指定する事によって、結果を変数に取得できる
$ret = print_r( $b, TRUE );
print "<PRE>$ret</PRE>" ;
$a[0] = 100;
# 結果は、出力制御関数を使用しないと取得できないが、
# 一度に複数の変数を指定できる
print "<PRE>" ;
var_dump( $a, $b );
print "</PRE>" ;
#---------------------------------------------------------
# 上記例では、$a はクローンなので、$b の中は変化しない
print "<hr>" ;
# 下記例では参照をセットしたので変化する
#---------------------------------------------------------
$a = array( 0, 1, "A" , "B" );
$b = array( 1, "A" , &$a );
print "<PRE>$ret</PRE>" ;
$a[0] = 100;
print "<PRE>" ;
var_dump( $a, $b );
print "</PRE>" ;
?>
Array
(
[0] => 1
[1] => A
[2] => Array
(
[0] => 0
[1] => 1
[2] => A
[3] => B
)
)
array(4) {
[0]=>
int(100)
[1]=>
int(1)
[2]=>
string(1) "A"
[3]=>
string(1) "B"
}
array(3) {
[0]=>
int(1)
[1]=>
string(1) "A"
[2]=>
array(4) {
[0]=>
int(0)
[1]=>
int(1)
[2]=>
string(1) "A"
[3]=>
string(1) "B"
}
}
--------------------------------------------------------------------------------
Array
(
[0] => 1
[1] => A
[2] => Array
(
[0] => 0
[1] => 1
[2] => A
[3] => B
)
)
array(4) {
[0]=>
int(100)
[1]=>
int(1)
[2]=>
string(1) "A"
[3]=>
string(1) "B"
}
array(3) {
[0]=>
int(1)
[1]=>
string(1) "A"
[2]=>
&array(4) {
[0]=>
int(100)
[1]=>
int(1)
[2]=>
string(1) "A"
[3]=>
string(1) "B"
}
}
copy
<?
$a = new myData;
$b = array( 1, "A" , &$a );
$ret = print_r( $b, TRUE );
print "<PRE>$ret</PRE>" ;
$a->add();
var_dump( $a, $b );
class myData
{
var $no;
function myData() {
$this->no = 1;
}
function add() {
$this->no++;
}
}
?>
Array
(
[0] => 1
[1] => A
[2] => myData Object
(
[no] => 1
)
)
object(myData)#1 (1) {
["no"]=>
int(2)
}
array(3) {
[0]=>
int(1)
[1]=>
string(1) "A"
[2]=>
&object(myData)#1 (1) {
["no"]=>
int(2)
}
}
1) を実現する為のコード(ログイン画面以外)
copy
session_start();
if ( $_GET['ボタンの名前'] == 'ログアウト' ) {
$_SESSION = array();
}
if ( $_SESSION['user' ] == "" ) {
$_SESSION['return_url'] = $_SERVER['このスクリプトの位置を示す変数' ];
// リダイレクト
header( "Location: ログイン画面の相対 URL" );
exit();
}
2) を実現する為のコード(ログイン画面)
copy
session_start();
if ( $_GET['ボタンの名前'] == 'ログアウト' ) {
$_SESSION = array();
}
if ( $_GET['user' ] != "" ) {
if ( $_GET['user' ] == "有効なユーザ名" ) {
if ( $_GET['pass' ] == "ユーザ名に対応する正しいパスワード" ) {
$_SESSION['user' ] = "有効なユーザ名" ;
if ( $_SESSION['return_url' ] != "" ) {
// リダイレクト
header( "Location: {$_SESSION['return_url' ]}" );
$_SESSION['return_url' ] = "" ;
exit();
}
else {
// リダイレクト
header( "Location: デフォルト画面のURL" );
$_SESSION['return_url' ] = "" ;
exit();
}
}
else {
// エラー処理
}
}
else {
// エラー処理
}
}
copy
<?
$data = "ABC-" ;
$txt = @file_get_contents( "php.txt" );
$ret = @eval( $txt );
# パターン1
if ( $ret === NULL ) {
print "return を指定していません<br>" ;
}
# パターン2
if ( $ret === FALSE ) {
print "異常終了しました<br>" ;
}
# パターン3
if ( $ret === $data ) {
print "return を指定しました<br>" ;
}
# eval でセットされた変数の値を表示
print $a;
?>
# パターン1
# パターン2
copy
# 致命的エラー( セミコロン無し )
$a = $data
# パターン3
php.txt
copy
$a = $data;
?>
ここはそのまま表示されます<br>
<?
copy
$x = "ABC" ;
$txt = @file_get_contents( "php.txt" );
eval("\$txt = \" $txt\";" );
print $txt;
php.txt
copy
select * from table_name where id = '$x'
バイナリレスポンス
copy
<?
header( "Content-Type: image/jpeg" );
print file_get_contents( "temp.jpg" );
?>
PHP4 での URL ダウンロード
copy
<?
$url = "http://winofsql.jp" ;
$fp = fopen( "download.htm" , "wb" );
fwrite( $fp, file_get_contents( $url ) );
fclose( $fp );
?>
Done
PHP5 での URL ダウンロード
copy
<?
$url = "http://winofsql.jp" ;
file_put_contents( "download.htm" , file_get_contents( $url ) );
?>
Done
act.bat
copy
set PHP_BIN=c:\php\cli\php.exe
set LBOX_SERVER=xxxxxxxxxxxxx
set LBOX_USER=yyyyyyyy
set LBOX_PASS=zzzzzzzz
set LBOX_REMOTE=/????/????/????/????/enum/webclass
set LBOX_LOCAL=D:\????\????\enum\webclass
%PHP_BIN% ftp_upload.php
pause
ftp_upload.php
copy
<?
$ftp_server = $_ENV['LBOX_SERVER' ];
$ftp_user = $_ENV['LBOX_USER' ];
$ftp_pass = $_ENV['LBOX_PASS' ];
$base_dir = $_ENV['LBOX_REMOTE' ];
$local_dir = $_ENV['LBOX_LOCAL' ];
$conn=ftp_connect($ftp_server);
if (!$conn) {
die('接続できません' . "\n" );
}
$result=@ftp_login($conn, $ftp_user, $ftp_pass);
if (!$result) {
die('ログインできません' . "\n" );
}
ftp_pasv($conn, true);
ftp_put($conn, $base_dir . "/control.htm" , $local_dir . "\control.htm" , FTP_ASCII );
ftp_put($conn, $base_dir . "/logo.htm" , $local_dir . "\logo.htm" , FTP_ASCII );
ftp_put($conn, $base_dir . "/frame.htm" , $local_dir . "\frame.htm" , FTP_ASCII );
ftp_close($conn);
print "処理が終了しました\n" ;
?>
copy
mb_language( "ja" );
mb_internal_encoding("UTF-8" ");
$bin_unicode = mb_convert_encoding( "あ" , "unicode" , "キャラクタセット" );
$hex_unicode = bin2hex($bin_unicode);
$num_unicode = ('0x' .$hex_unicode)+0;
$target = '&#' . $num_unicode . ';' ;