PHP / Perl


もう完全にメモ。殴り書き。

[ mysql ]
# tar xzf mysql-5.1.43.tar.gz
# cd mysql-5.1.43
# ./configure --prefix=/usr/local/mysql -with-charset=utf8 -with-extra-charsets=all
# make; make install; make clean

[ postgresql ]
# tar xzf postgresql-8.4.2.tar.gz
# cd postgresql-8.4.2
# ./configure --prefix=/usr/local/pgsql
# make; make install; make clean


[ openssl ]
# ./config --prefix=/usr/local/openssl enable-tlsext; make depend; make; make install; make clean;

[ apache ]
# ./configure --prefix=/usr/local/apache --enable-so --enable-ssl --with-ssl=/usr/local/openssl --enable-deflate
# make; make install; make clean

[ php ]
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --with-pgsql=/usr/local/pgsql --enable-mbstring --enable-mbregex
# make; make install; make clean
# cp php.ini-production /usr/local/php/lib/php.ini

[ php.ini ]
----
[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.script_encoding=auto
----

[ httpd.conf ]
----
DirectoryIndex index.html index.php
AddType application/x-httpd-php .php
----

[ index.php ]
----
<?php phpinfo() ?>
----

EVE-FA, ActiveDirectory, IDマネージャ, Cybozuのアカウント更新用スクリプト

各グループウェア等のアカウント更新用スクリプト。
batファイルより4つCSVを引数に渡して、EVE-FAのユーザー情報を元にパスワードを設定。
アカウント更新用のCSVをエクスポートします。

引数の順番は固定で、全てのCSVを渡すことが必須条件です。


[ evefa-ad-idm-cybozu.bat ]
-----
echo on
evefa-ad-idm-cybozu.pl eve-fa.csv ad.txt idm.csv cybozu.csv
[EOF]
-----


[ evefa-ad-idm-cybozu.pl ]
-----
#!/usr/local/bin/perl

sub createPass(){
    $chars = "012345678abcdefghijklmnorsuvwxyz";
    $len = length( $chars );
    $password = "";
    for( $i = 0; $i < 8; $i++ ){
        $password .= substr( $chars, int( rand( $len )), 1 );
        @password = $password;
    }
    return ($password);
}
sub getTime(){
    my $time = time();
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time);
    my $result = sprintf("%04d%02d%02d", $year + 1900, $mon + 1, $mday);
    return $result;
}

sub evefa_ad(){
    my $INFILE = $_[0];
    open(IN, "$INFILE");
    my $outfile = " $_[0]".getTime().".txt";
    open(OUT, ">> $outfile");
    while ($line = <IN>) {
        chomp($line);
        if($line ne ''){
            my @arrays = split( /,/, $line );
            @arrays[4] = createPass();
            $ret = "";
            $len =  $#arrays + 1;
            for($i=0; $i<$len; $i++){
                if($i == $len){
                    $ret = $ret.@arrays[$i];
                }else{
                    $ret = $ret.@arrays[$i].',';
                }
            }
            print(OUT "$ret\n");
        }
    }
    close(IN);
    close(OUT);
}

sub ad_conv(){
    my $EVEFILE = " $_[0]".getTime().".txt";
    my $INFILEA = $_[1];
    
    my $outfile = " $_[1]".getTime().".txt";
    open(OUT, ">> $outfile");

    open(ADIN, "$INFILEA");
    
    
    while ($ad_line = <ADIN>) {
        chomp($ad_line);
        if($ad_line ne ''){
            @ad_array = split (/\s+/, $ad_line);
        }
        if(@ad_array[2] eq "no"){
            $userName = @ad_array[1];
            if($userName ne ''){
                $userName = (split( /@/, $userName))[0];
                
                open(EVEIN, "$EVEFILE");
                while($eve_line = <EVEIN>){
                    chomp($eve_line);
                    if($eve_line ne ''){
                        my @arrays = split( /,/, $eve_line );
                        my $eve_ac = @arrays[3];
                        my $pass = @arrays[4];
                        if($userName eq $eve_ac){
                            print (OUT "$userName,$pass\n");
                        }
                    }
                }
                close(EVEIN);
            }
        }
    }
    close(ADIN);
    close(OUT);
}

sub idm(){
    my $EVEFILE = " $_[0]".getTime().".txt";
    my $INFILE = $_[1];
    my $outfile = " $_[1]".getTime().".txt";
    open(OUT, ">> $outfile");
    open(INFILE, "$INFILE");
    
    while ($idm_line = <INFILE>) {
        chomp($idm_line);
        if($idm_line ne ''){
            @idm_array = split (/,/, $idm_line);
        }
        if(@idm_array[3] == 1){
            open(EVEIN, "$EVEFILE");
            while($eve_line = <EVEIN>){
                chomp($eve_line);
                if($eve_line ne ''){
                    my @arrays = split( /,/, $eve_line );
                    my $eve_ac = @arrays[3];
                    my $pass = @arrays[4];
                    my $idm_ac = @idm_array[0];
                    my $idm_mail = @idm_array[6];
                    
                    if($idm_mail =~ /^[^@]+@[^.]+\..+/){
                        @idm_array[7] = $pass;
                    }else{
                        @idm_array[7] = "";
                    }
                    if($idm_ac eq $eve_ac){
                        
                        
                        $ret = "";
                        $len =  $#idm_array + 1;
                        for($i=0; $i<$len; $i++){
                            if($i == $len){
                                $ret = $ret.@idm_array[$i];
                            }else{
                                $ret = $ret.@idm_array[$i].',';
                            }
                        }
                        print(OUT "$ret\n");
                        $ret = "";
                    }
                }
            }
            close(EVEIN);
        }
    }
    close(INFILE);
    close(OUT);
}

sub cybozu(){
    my $IDMFILE = " $_[0]".getTime().".txt";
    my $CYBOZUFILE = $_[1];
    
    my $outfile = " $_[1]".getTime().".txt";
    open(OUT, ">> $outfile");
    open(IDMFILE, "$IDMFILE");

    while($idm_line = <IDMFILE>){
        chomp($idm_line);
        if($idm_line ne ''){
            my @idm_arrays = split( /,/, $idm_line );
            my $idm_ac = @idm_arrays[6];
            my $idm_pass = @idm_arrays[7];
            
            open(CYBOZUFILE, "$CYBOZUFILE");
            while ($cyb_line = <CYBOZUFILE>) {
                chomp($cyb_line);
                if($cyb_line ne ''){
                    @cyb_array = split (/,/, $cyb_line);
                }
                $len =  $#cyb_array + 1;
                for($i=0; $i<$len; $i++){ @cyb_array[$i] =~ s/\"//g; }
                
                
                my $cyb_login = @cyb_array[2];
                if($idm_ac eq $cyb_login && $cyb_login =~ /^[^@]+@[^.]+\..+/){
                    @cyb_array[3] = $idm_pass;
                    $ret = "";
                    for($i=0; $i<$len; $i++){
                        if($i == $len){
                            $ret = $ret.@cyb_array[$i];
                        }else{
                            $ret = $ret.@cyb_array[$i].',';
                        }
                    }
                    print(OUT "$ret\n");
                }
            }
            close(CYBOZUFILE);
        }
    }
    close(IDMFILE);
    close(OUT);
}

&evefa_ad(@ARGV[0]);
&ad_conv(@ARGV[0], @ARGV[1]);
&idm(@ARGV[0], @ARGV[2]);
&cybozu(@ARGV[2], @ARGV[3]);

[EOF]
-----

上記Perlスクリプトにて生成されたADアカウント情報のCSVを読み込んで一括設定するBatファイル。
[ ad_updateRead.bat ]
-----
echo off
FOR /F "eol=# tokens=1,2 delims=," %%a in (hoge.txt) do ad_update.bat %%a %%b
[EOF]
-----

net userコマンドにてADのアカウントを更新。

[ad_update.bat]
-----
echo off
net user "%1" "%2" /DOMAIN
[EOF]
-----

magic_quotes_gpcのOn、Offに依存しないスクリプトにする場合、

if (get_magic_quotes_gpc()) {
$arr = stripslashes($arr);
}

で、magic_quotes_gpcがOnならバックスラッシュ削除で強制的にクォートをはずす。
PEARのHTML_Template_ITで出力すると、¥0から¥99は消失してしまうので\を\\に変換しておく。

if (get_magic_quotes_gpc()) {
$arr = str_replace("\\\\", "\\\\\\\\", $arr);
$arr = stripslashes($arr);
}

このページの先頭へ