Avatar billede ttopholm Nybegynder
16. november 2006 - 13:43 Der er 11 kommentarer og
1 løsning

tilføje værdier i et array der er lavet

Jeg har dette script...

<Perl>

use DBI;

my ($sth, $dbh, $domain, $domainID, $created, $sql, $sqlsa);

$dbh = DBI->connect("DBI:xxxx:localhost","xxxx","xxxx");

$sth = $dbh->prepare("SELECT domainID, domain, created FROM domain ORDER BY domainID ASC");

$sth->execute();

while (($domainID, $domain, $created) = $sth->fetchrow_array())

{

        if($created == 0)

        {

                system("/bin/mkdir /home/$domain");

                system("/bin/mkdir /home/$domain/www");

                system("/bin/mkdir /home/$domain/ErrorLog");

                system("/bin/cp /home/index.php /home/$domain/www/index.php");

                system("/bin/chown apache:apache -R /home/$domain");

                $sql = $dbh->prepare("UPDATE domain SET created = 1 WHERE domainID = $domainID");

                $sql->execute();

        }

        push @{ $VirtualHost{'*:80'} },

                {

                ServerName    => "$domain",

                ServerAdmin    => "postmaster@$domain",

                ServerAlias    => "www.$domain",

                DocumentRoot  => "/home/$domain/www",

                ErrorLog      => "/home/$domain/ErrorLog/$domain-error_log",

                CustomLog      => qq{"|/usr/sbin/cronolog /websitelog/${domain}_access_log.\%Y-\%m-\%d" combined},

                };

}

$sth->finish();

$dbh->disconnect();

</Perl>


og det virker også... men hvordan tilføjer jeg ServerAlias fra en anden mysql tabel, til det her array, så de kommer ind og ligge sammen med de andre ServerAlias...

Jeg kan sagtens lave forbindelse og det hele til db'en, men jeg ved bare ikke hvad den smarteste måde er at tilføje dem på..
Avatar billede mfalck Praktikant
16. november 2006 - 14:56 #1
er der en sammenhæng mellem domain-.tabellen og den som indeholder serveralias ? I givet fald er det vel et spørgsmål om at joine de to tabeller i sql-sætningen
Avatar billede ttopholm Nybegynder
16. november 2006 - 15:05 #2
Ja... domainDI er PK i domain og FK i serverAlias

Men vil jeg ikke får flere resultater ud, end kun et per domæne som jeg gør nu

f.eks. hvis der er 4 server aliaser der passer til et domæne, får jeg vil 5 resultater ud.. domænet og de 4 serveraliaser, men jeg er jo kun interesseret i at den laver en virtualhost og sætter 4 serveraliaser i netop det array
Avatar billede mfalck Praktikant
16. november 2006 - 15:12 #3
ellers skal man lave endnu en forbindelse til dben og så hive de aliaser ud i en streng som du kan lægge ned i push-kommandoen.
Avatar billede ttopholm Nybegynder
16. november 2006 - 15:22 #4
du tænker på at lave sådan en streng her...

$SAstr = "ServerAlias => \"xxxx.xxxx.xx\", ServerAlias => \"yyy.xxxx.xx<","

I dur eller hvad
Avatar billede ttopholm Nybegynder
16. november 2006 - 15:23 #5
og så sætte det ind i push


                {

                ServerName    => "$domain",

                ServerAdmin    => "postmaster@$domain",

                ServerAlias    => "www.$domain",
               
                $SAstr

                DocumentRoot  => "/home/$domain/www",

                ErrorLog      => "/home/$domain/ErrorLog/$domain-error_log",

                CustomLog      => qq{"|/usr/sbin/cronolog /websitelog/${domain}_access_log.\%Y-\%m-\%d" combined},

                };
Avatar billede mfalck Praktikant
16. november 2006 - 20:48 #6
jeps
Avatar billede ttopholm Nybegynder
16. november 2006 - 21:31 #7
Det prøvede jeg, men den laver fejl i det..

Prøvede også:

$SAstr = 'ServerAlias => "xxxx.xxxx.xx", ServerAlias => "yyy.xxxx.xx",'

Og andre varianter, ved ikke om der er andre forslag
Avatar billede mfalck Praktikant
16. november 2006 - 21:38 #8
hvordan laver den fejl i det ?
Avatar billede mfalck Praktikant
16. november 2006 - 21:41 #9
jeg ville gætte på at det skulle se nogenlunde sådan ud:

my ($sth1, $sql1, $alias);
$sth = $dbh->prepare("SELECT alias FROM alias where domainid = $domainID");
$sth->execute();
while (($alias) = $sth->fetchrow_array()) {
  $SAstr .= 'ServerAlias => "$alias"
}
Avatar billede ttopholm Nybegynder
17. november 2006 - 11:50 #10
Lavede den her... ikke kønt, men det virker...

<Perl>
use DBI;
my ($sth, $dbh, $domain, $domainID, $created, $sql, $sqlsa, $alias, $path);
$dbh = DBI->connect("DBI:mysql:xxx:xxx","xxx","Xxx");
$sth = $dbh->prepare("SELECT domainID, domain, created FROM domain ORDER BY domainID ASC");
$sth->execute();
while (($domainID, $domain, $created) = $sth->fetchrow_array())
{
        if($created == 0)
        {
                system("/bin/mkdir /home/$domain");
                system("/bin/mkdir /home/$domain/www");
                system("/bin/mkdir /home/$domain/ErrorLog");
                system("/bin/cp /home/index.php /home/$domain/www/index.php");
                system("/bin/chown apache:apache -R /home/$domain");
                $sql = $dbh->prepare("UPDATE domain SET created = 1 WHERE domainID = $domainID");
                $sql->execute();
        }
                push @{ $VirtualHost{'*:80'} },
                {
                ServerName    => "$domain",
                ServerAdmin    => "postmaster@$domain",
                ServerAlias    => "www.$domain",
                DocumentRoot  => "/home/$domain/www",
                ErrorLog      => "/home/$domain/ErrorLog/$domain-error_log",
                CustomLog      => qq{"|/usr/sbin/cronolog /websitelog/${domain}_access_log.\%Y-\%m-\%d" combined},
                };

                $sqlsa = $dbh->prepare("SELECT domain, path FROM serveralias WHERE domainID =" . $domainID);
                $sqlsa->execute();
                while (($alias, $path) = $sqlsa->fetchrow_array())
                {
                        push@{ $VirtualHost{'*:80'} },
                        {
                                ServerName      => $alias,
                                ServerAdmin    => "postmaster@$domain",
                                DocumentRoot    => $path,
                                ErrorLog        => "/home/$domain/ErrorLog/$domain-error_log",
                                CustomLog      => qq{"|/usr/sbin/cronolog /websitelog/${domain}_access_log.\%Y-\%m-\%d" combined},
                        };
                }
}
$sth->finish();
$dbh->disconnect();
</Perl>
Avatar billede mfalck Praktikant
17. november 2006 - 13:08 #11
well - du har vel lavet det meste selv så pointene er vel dine :-)
Avatar billede ttopholm Nybegynder
21. november 2006 - 17:33 #12
Så lukker jeg
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester