Awstats 配置详解

Jun 07, 2016 pm 03:03 PM
src 詳しい説明 構成

[root@test src]# wget http://prdownloads.sourceforge.net/awstats/awstats-6.95.tar.gz [root@test src]# tar zxvf awstats-6.95.tar.gz [root@test src]# mv awstats-6.95 /usr/local/awstats [root@test src]# mkdir /var/lib/awstats [root@test awsta

[root@test src]# wget http://prdownloads.sourceforge.net/awstats/awstats-6.95.tar.gz

[root@test src]# tar zxvf awstats-6.95.tar.gz

[root@test src]# mv awstats-6.95 /usr/local/awstats

[root@test src]# mkdir /var/lib/awstats

[root@test awstats]# mkdir -m 755 /usr/local/awstats/data/

[root@test src]# cd /usr/local/awstats/

[root@test awstat]# perl /usr/local/awstats/tools/awstats_configure.pl

只填写域名,其它选项全部y或默认

[root@test awstats]# vi /etc/awstats/awstats.www.123.com.conf

修改日志文件路径:

LogFile="/usr/local/awstats/tools/logresolvemerge.pl /home/tool/access.20100817.11*.log |"

此为用awstats脚本自动合并分析所有/home/tool/access.20100817.11*.log日志

如果日志使用tar -zcvf 压缩,logresolvemerge.pl会自动调用zcat

也可以同时列出多个日志文件,如以下格式:

LogFile="/usr/local/awstats/tools/logresolvemerge.pl 1.log 2.log |"

合并日志也可用以下方式:

cat a.log b.log c.log | sort -m -t " " –k 4 > log

       将三个日志以空格为分隔符,对第四列进行排序,结果保存在log

 

添加GeoIP插件使awstats可以显示用户地理位置

cpan install Geo::IP

[root@test awstats]# cd /usr/local/src/

[root@test src]# wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz

[root@test src]# tar zxvf GeoIP.tar.gz

[root@test src]# cd GeoIP-1.4.6/

[root@test GeoIP-1.4.6]# ./configure && make && make install

[root@test src]# wget http://geolite.maxmind.com/download/geoip/api/perl/Geo-IP-1.38.tar.gz

[root@test src]# tar zxvf Geo-IP-1.38.tar.gz

[root@test src]#cd Geo-IP-1.38

[root@test Geo-IP-1.38]# perl Makefile.PL && make && make install

[root@test src]# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

[root@test src]# gunzip GeoLiteCity.dat.gz

[root@test src]# cp GeoLiteCity.dat /usr/local/share/GeoIP/

[root@test src]# vi /etc/awstats/awstats.www.dayu360.com.conf

启用或添加以下选项:

LoadPlugin="tooltips"

LoadPlugin="decodeutfkeys"

LoadPlugin="geoip GEOIP_STANDARD /usr/local/share/GeoIP/GeoIP.dat"

LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /usr/local/share/GeoIP/GeoLiteCity.dat"

 

[root@test awstats]# perl /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=www.dayu360.com –update

更新awstats数据库(即web页面显示的内容)

 

 

当登陆到awstatsweb界面时出现提示:

Error: Access to statistics is only allowed from an authenticated session to authenticated users.

则需把/etc/awstats/awstats.www.123.com.conf中:

              AllowAccessFromWebToAuthenticatedUsersOnly=0

 

访问web页:

http://192.168.0.80/awstats/awstats.pl?config=www.123.com

 

以上完成了基本设置,下面进行一些高级设置:

1)不同的日志格式对应不同的日志格式的设置:

一、若对运行在apache上的网站产生的日志(combined格式)进行分析则在/etc/awstats/awstats.www.123.com.conf文件中配置

LogType=W

LogFormat=1

二、若要对运行在nginx上的网站产生的日志进行分析,首先需要在nginx配置文件nginx.conf中更改产生日志的格式:

log_format  main  '$remote_addr - $remote_user [$time_local] $request '

'"$status" $body_bytes_sent "$http_referer" '

'"$http_user_agent" $http_x_forwarded_for';

access_log  logs/access.log  main;

然后在/etc/awstats/awstats.www.123.com.conf文件中配置

LogType=W

LogFormat=1

三、若nginx日志格式为:

log_format  main  '$remote_addr - $remote_user [$time_local] $request '

'"$status" $body_bytes_sent "$http_referer" '

'"$http_user_agent"';

access_log  logs/access.log  main;

则在/etc/awstats/awstats.www.123.com.conf文件中配置

LogType=W

LogFormat=%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"

注:网上某些文章的nginx.conflog_format后面加了$http_x_forwarded_for(来源ip),然而其在/etc/awstats/awstats.www.123.com.conf文件中配置还是:

LogFormat=%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot",则因为缺少对应关系而使得awstats报错。

可以通过修改nginx的日志格式(把$http_x_forwarded_for去掉)即可。

最后注意:通过测试发现%methodurl字段必须对应GET的日志,若有POST的日志或“-”则会报错。

 

 

 

 

Sftp自动上传日志:

Apache服务器:

useradd -u 1000 httplog -d /home/httplog/

passwd httplog

awstat 服务器:

创建get日志的脚本

vi /usr/local/shell/get_weblog.sh

#!/bin/sh

export WEB1=172.16.0.115;

export WEB2=172.16.0.116;

export WEB3=172.16.0.117;

export USER=httplog;

export PASS="bdGhS3EI4dSH86QBXjV9";

export CPATH="/home/httpdlog/`date +%Y`/`date --date='1 days ago' +%m`/"

export web1="web1.access.`date --date='1 days ago' +%Y%m%d`.log"

export web2="web2.access.`date --date='1 days ago' +%Y%m%d`.log"

export web3="web3.access.`date --date='1 days ago' +%Y%m%d`.log"

export SPATH="/opt/weblogs/`date +%Y`/`date --date='1 days ago' +%m`/"

echo "sftp start";

 

if [ ! -d $SPATH ]; then

mkdir -p $SPATH; fi

 

lftp -u ${USER},${PASS} sftp://${WEB1}

lcd $SPATH

get $CPATH/$web1

open sftp://${USER}:${PASS}@$WEB2

get $CPATH/$web2

open sftp://${USER}:${PASS}@$WEB3

get $CPATH/$web3

bye

EOF

echo "GET WEB LOG DONE!!!";

 

创建awstat更新脚本

vi /usr/local/shell/awstat-update.sh

#!/bin/bash

configfiles="www"

#configfiles="www bbs buy"

domain=123.com

command=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl

for conf in ${configfiles};

do

        ${command} -update -config=${conf}.${domain} -Databasebreak=month;

        ${command} -update -config=${conf}.${domain} -Databasebreak=day;

done

 

日历显示cgi

vi /usr/local/awstat/wwwroot/cgi-bin/calendar.pl

#!/usr/bin/perl

 

@domain_allow=("www");

#@domain_allow=("www","prom","buy","tag","blog","member");

$site=$ENV{"QUERY_STRING"};

if ($site eq ""){

        $site="www";

}else{

        $reject=1;

        foreach $sub_domain (@domain_allow){

                if ($sub_domain eq $site){

                        $reject=0;

                }

        }

}

# The awstats config file name

$CONFIG=$site.".123.com";

 

### Begin program ###

 

@now=localtime(time);

$today_day=$now[3];

$today_month=$now[4]+1;

$today_year=$now[5]+1900;

 

@yesterday=localtime(time-3600*24);

$ytd_day=$yesterday[3];

$ytd_month=$yesterday[4]+1;

$ytd_year=$yesterday[5]+1900;

 

$lastmonth=$today_month-1;

$lastmonth_year=$today_year;

if($lastmonth

{

        $lastmonth=1;

        $lastmonth_year=$today_year-1;

}

$lastyear=$today_year-1;

 

print "Content-type: text/html\n\n";

print "\n";

if ($reject==1){

        print "subdomain:'$site' is not accepted, please contact admin";

}else{

        print "Choose Subdomain:

        foreach $subdomain (@domain_allow){

                if($subdomain eq $site) {

                        $selected="selected='selected'";

                }else{

                        $selected="";

                }

                print "";

        }

 

        print "
";

        print "Today ";

        print "Yesterday ";

        print "ThisMonth ";

        print "LastMonth ";

        print "ThisYear ";

        print "LastYear ";

        print "\n


\n";

 

        printCal($today_year, $today_month);

        print "\n
\n";

        printCal($lastmonth_year, $lastmonth);

}

print "\n


\n";

 

##### Methods ######

 

sub getLink

{

        my($year, $month, $day)=@_;

        $query="";

        if($day)

        {

                $query="DatabaseBreak=day&day=${day}&month=${month}&year=${year}";

        }

        elsif($month)

        {

                $query="month=${month}&year=${year}";

        }

        elsif($year)

        {

                $query="year=${year}&month=all";

        }

        return "awstats.pl?config=${CONFIG}&$query";

}

 

sub printCal

{

my($y, $m)=@_;

open(CAL, "cal $m $y |");

@days = ;

close(CAL);

 

$month = $days[0];

$month=~ s/\s\s\s*//g;

$mbg="";

if($m==$today_month && $y==$today_year)

{

        $mbg="bgcolor='#ffaaaa'";

}

print "

\n";

foreach $dy (split(/ /, $days[1]))

{

        print "

";

}

print "

\n";

shift(@days);

shift(@days);

foreach $line (@days)

{

        chomp $line;

        $line =~ s/^\s+//;

        $line =~ s/\s+$//;

        print "

";

        foreach $d (split(/\s+/, $line))

        {

                $bg="";

                if($d==$today_day && $m==$today_month && $y==$today_year)

                {

                        $bg="bgcolor='#ffaaaa'";

                }

                print "

";

        }

        print"

\n";

}

print "

$month
$dy
$d
\n";

}

chmod +x /usr/local/awstat/wwwroot/cgi-bin/calendar.pl

Awstats 配置详解

Awstats 6.9.5默认即为GBK编码,改为UTF-8后部分搜索词乱码按照网上所述方式未能解决,GBK状态即无乱码

修改awstats pagecodeGBK

cd /usr/local/awstats/wwwroot/cgi-bin/lang

cp awstats-cn.txt awstats-cn-gbk.txt

vi awstats-cn-gbk.txt

PageCode=utf-8

修改为

PageCode=GBK

iconv -f UTF-8 -t GBK awstats-cn-gbk.txt > awstats-cn.txt

 

添加QQ IP

wget http://blog.pcware.cn/downloads/ip_geo_qqwry.zip

wget http://www.ieasy.org/download/qqwry.pl

wget http://www.ieasy.org/download/qqhostinfo.pm

ip_geo_qqwry.zip qqwry.pl 任选其一

unzip ip_geo_qqwry.zip

chmod 755 ip_geo_qqwry.pl

mv ip_geo_qqwry.pl /usr/local/awstats/wwwroot/cgi-bin/

wget http://update.cz88.net/soft/qqwry.rar

wget http://packages.sw.be/unrar/unrar-3.9.10-1.el5.rf.x86_64.rpm

rpm -ivh unrar-3.9.10-1.el5.rf.x86_64.rpm

mkdir qqwry && cd qqwry

unrar e ../qqwry.rar

mkdir /usr/local/share/ip_geo/

mv QQWry.Dat /usr/local/share/ip_geo/

cd ..

mv qqhostinfo.pm /usr/local/awstats/wwwroot/cgi-bin/plugins/

vi /usr/local/awstats/wwwroot/cgi-bin/plugins/qqhostinfo.pm

require "${DIR}/plugins/qqwry.pl";

修改为:

require "/usr/local/awstats/wwwroot/cgi-bin/ip_geo_qqwry.pl";

解决Awstats GBK页面IP 物理地址乱码:

vi /usr/local/awstats/wwwroot/cgi-bin/ip_geo_qqwry.pl

注释掉以下两行

#use Encode;

#    $ip_geo_addr=decode("gbk",$ip_geo_addr);

附上ip_geo_qqwry.pl源码,以防下载链接失效

#/* Copyright (C) 2002-2009 Proguru.

#   changuoqiang[at]gmail[dot]com

#   http://blog.pcware.cn

#

#   The Source Code is free; you can redistribute it and/or

#   modify it under the terms of the GNU Lesser General Public

#   License as published by the Free Software Foundation; either

#   version 2.1 of the License, or (at your option) any later version.

#

#   The Source Code is distributed in the hope that it will be useful,

#   but WITHOUT ANY WARRANTY; without even the implied warranty of

#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU

#   Lesser General Public License for more details.

#

#   You should have received a copy of the GNU Lesser General Public

#   License along with the KWinUI; if not, write to the Free

#   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA

#   02111-1307 USA.  */

#

#/*

# *  Jun 14,2009   

# */

 

#use Encode;

 

sub ipwhere{

        my $ip      = shift;

        my @ip      = split(/\./, $ip);

        my $ip_num  = $ip[0]*256**3 + $ip[1]*256**2 + $ip[2]*256 + $ip[3];

 

    #my $qqwry_dat="${DIR}/plugins/QQWry.Dat";

        my $qqwry_dat = "/usr/local/share/ip_geo/QQWry.Dat";

        open(INFILE, "$qqwry_dat");

        binmode(INFILE);

 

        my $first_index_of_begin_ip, $last_index_of_begin_ip;

        sysread(INFILE, $first_index_of_begin_ip, 4);

        sysread(INFILE, $last_index_of_begin_ip, 4);

 

        $first_index_of_begin_ip    = unpack("L",$first_index_of_begin_ip);

        $last_index_of_begin_ip     = unpack("L",$last_index_of_begin_ip);

        my $total_index_of_begin_ip = ($last_index_of_begin_ip - $first_index_of_begin_ip)/7 + 1;

 

    #binary search the begin ip

    my $begin_index, $end_index = $total_index_of_begin_ip;

    my $middle_index, $middle_ip, $middle_ip_num;

 

#    while(1){

#        if($begin_index >= $end_index-1){

#            last;

#        }

#        $middle_index = int(($end_index + $begin_index)/2);

#        seek(INFILE, $first_index_of_begin_ip + $middle_index*7, 0);

#        read(INFILE, $middle_ip, 4);

#        $middle_ip_num = unpack("L", $middle_ip);

#        if($ip_num

#            $end_index = $middle_index ;

#        } else {

#            $begin_index = $middle_index ;

#        }

#    }

 

    while($begin_index

 

        $middle_index = int (($end_index + $begin_index)/2);

        seek(INFILE, $first_index_of_begin_ip + 7*$middle_index, 0);

        read(INFILE, $middle_ip, 4);

        $middle_ip_num = unpack("L", $middle_ip);

 

        if($ip_num == $middle_ip_num){

            $begin_index = $middle_index;

            last;

        } elsif ($ip_num

            $end_index = $middle_index;

        } else {

            $begin_index = $middle_index;

        }

    }

 

    my $end_ip_index_offset, $end_ip, $end_ip_num, $end_ip_offset;

    $end_ip_index_offset = $first_index_of_begin_ip + 7*($begin_index) + 4;

    seek(INFILE, $end_ip_index_offset, 0);

    read(INFILE, $end_ip_offset, 3);

   

    $end_ip_offset = unpack("L", $end_ip_offset."\0");

    seek(INFILE, $end_ip_offset, 0);

    read(INFILE, $end_ip, 4);

    $end_ip_num = unpack("L", $end_ip);

 

    if($ip_num

        my $offset, $position_mode, $geo_country_mode_2_pos=0;

 

        $/="\0";

        read(INFILE,$position_mode,1);

 

        #position mode 1  

        if ($position_mode eq "\1") {

            read(INFILE,$offset,3);

            $offset = unpack("L",$offset."\0");

            seek(INFILE,$offset,0);

            read(INFILE,$position_mode,1);

        }

        #position mode 2

        if ($position_mode eq "\2") {

            read(INFILE,$offset,3);

            $geo_country_mode_2_pos = tell(INFILE);

            $offset = unpack("L",$offset."\0");

            seek(INFILE,$offset,0);

        } else {

            seek(INFILE,-1,1);

        }

        $ip_geo_country=;

 

        if($geo_country_mode_2_pos != 0){

            seek(INFILE, $geo_country_mode_2_pos, 0);

        }

 

        #geo local, geo local only position mode 2

        read(INFILE,$position_mode,1);

        if($position_mode eq "\2") {

            read(INFILE,$offset,3);

            $offset = unpack("L",$offset."\0");

            seek(INFILE,$offset,0);

        } else {

            seek(INFILE,-1,1);

        }

        $ip_geo_local=;

    } else{

        $ip_geo_country = "未知数据";

    }

 

        chomp($ip_geo_country, $ip_geo_local);

        $/="\n";

        close(INFILE);

 

        my $ip_geo_addr="$ip_geo_country $ip_geo_local";

        $ip_geo_addr =~ s/CZ88\.NET//isg;

#    $ip_geo_addr=decode("gbk",$ip_geo_addr);

 

        return $ip_geo_addr;

}

 

1;

 

更新IP库脚本:

# Task file of update IP database in [crontab]

TMP_PATH="/tmp/ipdata"

Geo_PATH="/usr/local/share/GeoIP/"

Qip_PATH="/usr/local/share/ip_geo/"

 

#Last file stat

stat /usr/local/share/GeoIP/GeoLiteCity.dat     >>      /var/log/ipdata.log

stat /usr/local/share/GeoIP/GeoIP.dat           >>      /var/log/ipdata.log

stat /usr/local/share/ip_geo/QQWry.Dat          >>      /var/log/ipdata.log

 

 

mkdir $TMP_PATH

cd $TMP_PATH

#

/usr/bin/wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP.tar.gz

/usr/bin/wget http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz

/usr/bin/wget http://update.cz88.net/soft/qqwry.rar

#--> end of download

/bin/tar zxf GeoIP.tar.gz

/usr/bin/gzip -df GeoLiteCity.dat.gz

/usr/bin/unrar e qqwry.rar

mv -f GeoIP-*/data/GeoIP.dat $Geo_PATH

mv -f Geo*.dat $Geo_PATH

mv -f QQWry.Dat $Qip_PATH

cd ..

rm -rf $TMP_PATH

#New file stat

stat /usr/local/share/GeoIP/GeoLiteCity.dat     >>      /var/log/ipdata.log

stat /usr/local/share/GeoIP/GeoIP.dat           >>      /var/log/ipdata.log

stat /usr/local/share/ip_geo/QQWry.Dat          >>      /var/log/ipdata.log

 

 

 

 

 

改进:

Apache Server使用如下脚本处理日志

策略: crontab每天执行此脚本,自动备份前一天日志,并删除一周前的未压缩日志,30天前的压缩日志

#!/bin/sh

HOST=web1

LOG_PATH="/home/httpdlog/`date +%Y`/`date --date='1 days ago' +%m`/"

BAK_PATH="/opt/backup/weblog/`date +%Y`/`date --date='1 days ago' +%m`/"

YESTERDAY=`date --date='1 days ago' +%Y%m%d`

BAK_FILE=$HOST-$YESTERDAY.tgz

LOG_FILE=$HOST.access.$YESTERDAY.log

 

if [ ! -d $BAK_PATH ]; then

mkdir -p $BAK_PATH; fi

 

tar zcfP $BAK_PATH/$BAK_FILE $LOG_PATH/$LOG_FILE

find /opt/backup/ -mtime +30 -name "*.log" -exec rm -rf {} \;

find /opt/backup/ -depth  -empty -type d -exec rmdir -p {} \;

 

find /home/httpdlog/ -mtime +7 -name "*.log" -exec rm -rf {} \;

find /home/httpdlog/ -depth -empty -type d -exec rmdir -p {} \;

 

echo "done!"

 

Awstats Server

cat get_weblog_tgz.sh

#!/bin/sh

export WEB1=172.16.0.115;

export WEB2=172.16.0.116;

export WEB3=172.16.0.117;

export USER=httplog;

export PASS="bdGhS3EI4dSH86QBXjV9";

export CPATH="/opt/backup/weblog/`date +%Y`/`date --date='1 days ago' +%m`/"

export web1="web1-`date --date='1 days ago' +%Y%m%d`.tgz"

export web2="web2-`date --date='1 days ago' +%Y%m%d`.tgz"

export web3="web3-`date --date='1 days ago' +%Y%m%d`.tgz"

export SPATH="/opt/weblogs/`date +%Y`/`date --date='1 days ago' +%m`/"

echo "sftp start";

 

if [ ! -d $SPATH ]; then

mkdir -p $SPATH; fi

 

lftp -u ${USER},${PASS} sftp://${WEB1}

lcd $SPATH

get $CPATH/$web1

open sftp://${USER}:${PASS}@172.16.0.116

get $CPATH/$web2

open sftp://${USER}:${PASS}@172.16.0.117

get $CPATH/$web3

bye

EOF

echo "GET WEB LOG DONE!!!";

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxシステムにおけるGDMの動作原理と設定方法 LinuxシステムにおけるGDMの動作原理と設定方法 Mar 01, 2024 pm 06:36 PM

タイトル: Linux システムにおける GDM の動作原理と構成方法 Linux オペレーティング システムでは、GDM (GNOMEDisplayManager) は、グラフィカル ユーザー インターフェイス (GUI) ログインとユーザー セッション管理を制御するために使用される一般的なディスプレイ マネージャーです。この記事では、GDM の動作原理と構成方法を紹介し、具体的なコード例を示します。 1. GDM の動作原理 GDM は GNOME デスクトップ環境のディスプレイ マネージャーであり、X サーバーの起動とログイン インターフェイスの提供を担当します。

Linux Bashrc の機能、構成、使用法を理解する Linux Bashrc の機能、構成、使用法を理解する Mar 20, 2024 pm 03:30 PM

Linux Bashrc について: 機能、構成、および使用法 Linux システムでは、Bashrc (BourneAgainShellrunco​​mmands) は非常に重要な構成ファイルであり、システムの起動時に自動的に実行されるさまざまなコマンドと設定が含まれています。 Bashrc ファイルは通常、ユーザーのホーム ディレクトリにある隠しファイルであり、その機能はユーザーの Bashshell 環境をカスタマイズすることです。 1. Bashrc関数の設定環境

Win11での管理者権限の取得について詳しく解説 Win11での管理者権限の取得について詳しく解説 Mar 08, 2024 pm 03:06 PM

Windows オペレーティング システムは世界で最も人気のあるオペレーティング システムの 1 つであり、その新バージョン Win11 が大きな注目を集めています。 Win11 システムでは、管理者権限の取得は重要な操作であり、管理者権限を取得すると、ユーザーはシステム上でより多くの操作や設定を実行できるようになります。この記事では、Win11システムで管理者権限を取得する方法と、権限を効果的に管理する方法を詳しく紹介します。 Win11 システムでは、管理者権限はローカル管理者とドメイン管理者の 2 種類に分かれています。ローカル管理者はローカル コンピュータに対する完全な管理権限を持っています

Oracle SQLの除算演算の詳細説明 Oracle SQLの除算演算の詳細説明 Mar 10, 2024 am 09:51 AM

OracleSQL の除算演算の詳細な説明 OracleSQL では、除算演算は一般的かつ重要な数学演算であり、2 つの数値を除算した結果を計算するために使用されます。除算はデータベース問合せでよく使用されるため、OracleSQL での除算演算とその使用法を理解することは、データベース開発者にとって重要なスキルの 1 つです。この記事では、OracleSQL の除算演算に関する関連知識を詳細に説明し、読者の参考となる具体的なコード例を示します。 1. OracleSQL での除算演算

Linux システムで FTPS を構成してインストールする方法 Linux システムで FTPS を構成してインストールする方法 Mar 20, 2024 pm 02:03 PM

タイトル: Linux システムで FTPS を構成およびインストールする方法、具体的なコード例が必要です。Linux システムでは、FTPS は安全なファイル転送プロトコルです。FTP と比較して、FTPS は TLS/SSL プロトコルを通じて送信データを暗号化し、データのセキュリティを向上させます。伝染 ; 感染。この記事では、Linux システムに FTPS を構成およびインストールする方法を紹介し、具体的なコード例を示します。ステップ 1: vsftpd をインストールする ターミナルを開き、次のコマンドを入力して vsftpd をインストールします: sudo

MyBatis Generator 設定パラメータの解釈とベスト プラクティス MyBatis Generator 設定パラメータの解釈とベスト プラクティス Feb 23, 2024 am 09:51 AM

MyBatisGenerator は、MyBatis が公式に提供するコード生成ツールで、開発者がデータベース テーブル構造に準拠した JavaBeans、Mapper インターフェイス、および XML マッピング ファイルを迅速に生成するのに役立ちます。コード生成に MyBatisGenerator を使用するプロセスでは、構成パラメーターの設定が重要です。この記事では、構成パラメータの観点から開始し、MyBatisGenerator の機能を詳しく説明します。

win11 コンピューターの構成はどこで確認できますか? win11コンピュータの構成情報を確認する方法 win11 コンピューターの構成はどこで確認できますか? win11コンピュータの構成情報を確認する方法 Mar 06, 2024 am 10:10 AM

win11システムを使用するとき、コンピューターの構成を確認する必要がある場合がありますが、多くのユーザーは、win11コンピューターの構成をどこで確認すればよいか尋ねています。実際、その方法は非常に簡単で、設定でシステム情報を直接開き、コンピュータの構成情報を表示できます。このサイトでは、win11 コンピューターの構成情報を見つける方法をユーザーに注意深く紹介します。 win11 コンピューターの構成情報を確認する方法 方法 1: 1. [スタート] をクリックし、[コンピューターの設定] を開きます。 3. このページでは、コンピュータの構成情報を表示できます。 2. コマンド プロンプト ウィンドウで「systeminfo」と入力し、Enter キーを押してコンピュータの構成を表示します。

PHPモジュロ演算子の役割と使い方を詳しく解説 PHPモジュロ演算子の役割と使い方を詳しく解説 Mar 19, 2024 pm 04:33 PM

PHP のモジュロ演算子 (%) は、2 つの数値を除算した余りを取得するために使用されます。この記事では、モジュロ演算子の役割と使用法について詳しく説明し、読者の理解を深めるために具体的なコード例を示します。 1. モジュロ演算子の役割 数学では、整数を別の整数で割ると、商と余りが得られます。たとえば、10 を 3 で割ると、商は 3 になり、余りは 1 になります。モジュロ演算子は、この剰余を取得するために使用されます。 2. モジュロ演算子の使用法 PHP では、% 記号を使用してモジュロを表します。

See all articles