配列の○番目から○番目までを取り出す。


array_slice($array, [何番目から], [何個]);

$array = ("い", "ろ", "は", "に", "ほ");
$sliced_array = array_slice($array, 0, 3); ← い、ろ、は が新しい配列の中に格納されます。
$sliced_array = array_slice($array, 2); ← は、に、ほ が新しい配列の中に格納れます。

改訂3版 基礎PHP (IMPRESS KISO SERIES)
Array
インプレスジャパン
売り上げランキング: 127036
Posted in PHP

アクセスログを記録して解析する-1

シェルスクリプトとcronでアクセス毎の時間、url、ホスト名を日ごとに別ファイルに記録する

1)サイト内の各ページ(phpファイル)にアクセス毎にログファイル(log.dat)に記入していくよう記述する

$year = date('Y');
$month = date('m');
$day = date('d');
$hour = date('H');
$hostip = getenv("REMOTE_ADDR");
$hostname = gethostbyaddr($hostip);
$platform = get_browser(null, true);
$browser = $platform["parent"];
/*** アクセス情報を一件のレコードとする ***/
$log = $hour . "," . $item_id . "," . $hostip . "," . $hostname . "," . $browser . "\r\n";
/*** 記録するファイル名 ***/
$countfile = "log.dat";
/*** レコードを末尾へ記入 ***/
$fp = @fopen($countfile,"a");
fputs($fp, $log);
fclose($fp);
使った関数
getenv(“REMOTE_ADDR”) アクセス元のIPアドレスを取得する
gethostbyaddr IPアドレスからホスト名を取得する
get_browser(null, true) ブラウザ情報を取得する

2)毎日夜中にlog.datを[日付].datへコピーして消去する

log.datを[日付].datへコピーして内容を消去するのshellスクリプトlog_bk.shを作成します。

#!/bin/sh
fecha=`date '+%Y%m%d'`            ←日付(fecha)を取得
cp -p log.dat ${fecha}.dat    ←log.datを日付.datへコピー
cat /dev/null >log.dat      ←log.datへnullを書き込み消去

上記のスクリプトを毎日23時59分に実行するようcronを設定します。

#crontab -e

でツールを起動して/etc/crontabを編集します。
viと同じ感じで操作します。

59 23 * * * /[ディレクトリ]/log_bk.sh

と記入。
数字は左から、分、時間、日、月、週 を指定し、実行するファイル名を記入して保存。

#crontab -l

で記入した内容が表示されればOKです。

phpとcronで日毎のlog.datをデータベースへ格納する

1)log.datの中身をDBへ格納するphpファイルlog.phpを作成する

$file_name = "/hoge/log.dat";
$text = fopen($file_name,'r');
while(!(feof($text))){
$lines = fgets($text);
$_line = explode(",", $lines);
$sql = "insert into tbl_log (itm_id, log_ip, log_month, log_day, log_hour, log_year) values ('" . $_line["1"] . "', '" . $_line["2"] . "', '" . $month . "', '" . $day . "', '" . $_line["0"] . "', '" . $year . "')";
$rst = mysql_query($sql,$con)or die("no");
}
fclose($text);

使った関数
fopen ファイルを開く。’r’は読み込み専用
feof ファイルの最後かどうかをチェックする
explode(“[区切り記号]”, “[文字列]”) 文字列を区切り記号で区切って配列に格納する

2)log.phpを毎日実行させる

crontabへ記述します。

58 23 * * * /usr/bin/php /hoge/logtodb.php

phpをcronで実行させるにはcrontabへphpへのパスを指定する必要があります。
user/bin/php

which php

で調べます。

エクアドル、サリーナスのカジキマグロ

にほんブログ村 IT技術ブログ MySQLへ

多次元配列のソート。 ディレクトリの中身を array_multisort を使ってソートする

配列の初期化

                        $dirlist = array();
$udate = array();

 ディレクトリ内のファイル名を取得して$strDirに格納

            $filedir = ディレクトリ名;
$strDir = opendir($filedir)or die("couldnt open directory");

 ディレクトリの内容を順に配列$dirlistに格納

			while($str = readdir($strDir)){
array_push($dirlist,$str);
}

 ファイルの総数を $files へ格納

			$files = count($dirlist);

カウンターを初期化

                        if(!($counter)){
$counter = 0;
}

 ファイルのパスを$openfilepassへ格納する

                        while ($counter < $files){
$openfile = $dirlist["$counter"];
$openfilepass = $filedir . "/" . $dirlist["$counter"];
$counter ++;
}

ファイルの更新日を取得して配列の格納する

			$mod = filemtime($openfilepass);
$ud = date("Y/m/d H:i", $mod);
array_push($udtime,$ud); 

ファイル名と更新日の二次元配列ができます

            $list_array = $array($dirlist,$udtime);

 ファイル名順でソートする

                        array_multisort($list_array[0], SORT_STRING, SORT_ASC,
$list_array[1], SORT_STRING, SORT_ASC);

 
 日付の新しい順でソートする

                        array_multisort($list_array[1], SORT_STRING, SORT_DESC,
$list_array[0], SORT_STRING, SORT_ASC);

確認

                        print_r($list_array);

参照URL:
http://metaboy.blog23.fc2.com/blog-entry-114.html
http://d.hatena.ne.jp/devillikeaangel/20090409/1239263385 

powを使って数値の最後の桁(最後からn桁)の数字を取得する

pow( )
引数で与えられた数値を指数の数だけ掛け合わせ、その結果を返します。
ただし、累乗が計算できない場合には、警告が発生し「false」」を返します。

数値のn桁目の数字を取得するには
10のn乗で割った余りを求める。

使用例

$numero=213

$a = $numero % (pow(10,1));

print $a;

:出力結果:::

3

$numero=213

$a = $numero % (pow(10,2));

print $a;

:出力結果:::

13

また忘れそう。。。

mossoró nov.2007

Posted in PHP

文字列の〜文字目を取得する

最初から〜文字の場合は0から

$txt = supercalifragilisticexpialidocious;
$check = substr($txt,0,6);
print $txt

出力結果は → superc

6文字目から10文字

$txt = supercalifragilisticexpialidocious;
$check = substr($txt,6,10);
print $txt

出力結果は → alifragili

後ろから10文字目のトコから6文字

$txt = Pseudoantidisestablishmentarianism;
$check = substr($txt,-10,6);
print $txt

出力結果は → ntaria

後ろから10文字目のトコから後ろから6文字目のトコまで

$txt = Hepaticocholangiocholecystenterostomies;
$check = substr($txt,-10,-6);
print $txt

出力結果は → rost

maisa/RN

Posted in PHP

PHPでかんたんな画像アップローダー

保存先のフォルダを選べる画像アップローダを作成する

upload.phpのフォーム部分を記述します。

<table>
<form action=’upload.php‘ method=’post’ enctype=’multipart/form-data’>
<tr>
<td>ファイル:</td>
<td><input type=’file’ name=’upfile’ size=’30’></td>
</tr>
<tr>
<td>保存先:</td>
<td>
<select name=’folder’>
<option value=’img01/’>フォルダ1</option>
<option value=’img02/’>フォルダ2</option>
</select>
</td>
</tr>
<tr>
<td colspan = ‘2’ align=’center’>
<input type=’submit’ value=’アップロード’>
<input type=’hidden’ name=’phase’ value=’receive’>
</td>
</tr>
</form>
</table>

enctype=’multipart/form-data’

  • フォームからデータを送信するためのエンコードです。

    [upfile][name] ファイル名

    [upfile][type] ファイルタイプ image/jpeg など

    [upfile][tmp_name] アップロードされたファイルに一時的につけられる、パスを含むテンポラリファイル名 /tmp/phpJP00Aqなど

    [upfile][error] エラーがなければ0

    [upfile][size] ファイルサイズ

    が送られます。

phaseがreceiveだったら受け取る部分を実行します

if($phase == ‘receive’){

/***  受け取ったあとの処理 ***/

if( is_uploaded_file($_FILES[“upfile”][“tmp_name”])or die(“its not uploaded file”)){
if( move_uploaded_file($_FILES[“upfile”][“tmp_name”], $_POST[“folder”] . $_FILES[“upfile”][“name”])or die(“couldnt move the file”)){
chmod($_POST[“folder”] . $_FILES[“upfile”][“name”], 0644);
$file_name = $_POST[“folder”] . $_FILES[“upfile”][“name”];
$message = “ファイルをアップロードしました。