Avatar billede mbb Nybegynder
22. oktober 2000 - 03:15 Der er 12 kommentarer og
1 løsning

Script virker fint gennen web, men ikke via BAT fil

hejsa

vi udsender dagligt nogle mails med vittigheder

til dette bruges et PHP script som startes af en BAT fil hver nat.
(altså med en PHP.EXE d:\\sti\\script.php)

scriptet er indrettet sådan at hvis der ikke er nogen vittigheder valgt for en dag, finder det selv nogle, inden det sender ud.




her kommer problemet...

når jeg laver en test-udsending og starter scriptet ved at gå ind på filen i via browseren, virker det fint!
når jeg starter scriptet via BAT-filen bliver der udvalgt de samme vittigheder HVER gang.



Systemet er en Windows NT 4 Server med IIS4 og PHP401 installeret som ISAPI plugin


jeg har testet det med PHP401, 402 og 403 - resultatet er det sammen, når scriptet startes og kører igennem IIS, virker det fint, men når det startes via en BAT fil så finder den de samme 3 vitser hver dag

er der nogen der ved hvad der kan gøres ved det? eller kender til problemet eller har nogle gode råd?
Avatar billede andreas Nybegynder
22. oktober 2000 - 14:21 #1
kan vi få lov til at se kilden for begge filer ???? det ville måske hjælpe...
Avatar billede mbb Nybegynder
22. oktober 2000 - 15:18 #2
    $result = mysql_query(\"select * from mail_content where scheduled=\'$date\' AND LENGTH(content) > 2 AND send_method=\'1\' AND servicetaker=\'$servicetaker\' AND mail_product=\'$mail_product\'\");   

   
    echo mysql_error();
    $num3 = mysql_num_rows($result);
    if ($num3 != 0) {
            $mail_content_ID = mysql_result($result,0,\"mail_content_ID\");
            $content = mysql_result($result,0,\"content\");
            $scheduled = mysql_result($result,0,\"scheduled\");
    }
   
    else{
            flush();
            $select=\"SELECT ent_item_ID FROM items_reserved WHERE send_method=1 AND mail_product=$mail_product AND servicetaker=$servicetaker\";
            $res = mysql_query($select);
            echo mysql_error();
            $num = mysql_num_rows($res);
            $i = 1;
            while($show = mysql_fetch_array($res)) {
                if ($i == $num) {
                    $notthem .= $show[ent_item_ID];
                }else{
                    $notthem .= $show[ent_item_ID] . \",\";
                }
                $i++;
            }
            if ($num != 0) {
                $Q2 .= \" AND ent_item_ID NOT IN ($notthem)\";
                }
            $SQL = \"SELECT ent_item_ID FROM ent_item WHERE ent_mailstatus_ID=1 $Q $Q2\";
            echo $SQL.\"<br>\";
            $result = mysql_query($SQL);
            echo mysql_error();
            $num2 = mysql_num_rows($result);
            if ($num2 < 3) {
            $SQL = \"SELECT ent_item_ID FROM ent_item WHERE approved=\'Y\' $Q\";
                        $result = mysql_query($SQL);
            $num2 = mysql_num_rows($result);
            }
            $m3 = 0;
            while ($m3 < 3)
                {
                $ert = $num2-1;
                $it = @mt_rand(0,$ert);
                    while ($array[$it] == 1)
                    {
                        $array[$it] = @mt_rand(0,$ert);
                    }
                $array[$it] = 1;
                $m3++;   
                }
        $nr = 1;
        while (list($key, $val) = each($array))
                {
            //    $result2 =mysql_query(\"select * from ent_item where ent_mailstatus_ID=1 $Q\");
                echo mysql_error();
                $content .= \"#\". @mysql_result($result,$key,\"ent_item_ID\").\"#\". \"\\n\";
                $nr++;
                }
        mysql_query(\"REPLACE INTO mail_content (scheduled,content,send_method,servicetaker,mail_product) VALUES (\'$date\',\'$content\',\'1\',\'$servicetaker\',\'$mail_product\')\");
Avatar billede mbb Nybegynder
22. oktober 2000 - 15:46 #3
jeg ved ikke om der er nogen af disse funktioner som vises her, som ikke virker når scriptet startes fra DOS prompten via PHP.exe...
Avatar billede mbb Nybegynder
22. oktober 2000 - 15:57 #4
ok, jeg kan nu sige at det kun virker når scriptet køres gennem PHP_ISAPI.DLL (altså i IIS)

hvis kører det gennem PHP.EXE som CGI modul så virker det heller ikke!
Avatar billede steffen Nybegynder
22. oktober 2000 - 18:54 #5
Simpelt, du glemmer at initialisere tilfældighedsgeneratoren i PHP.

Indsæt et:

mt_srand()

i starten af dit script, så virker det - på hvilken måde du måtte vælge.
Avatar billede andreas Nybegynder
22. oktober 2000 - 19:19 #6
hvordan ser .bat filen ud ??
Avatar billede mbb Nybegynder
22. oktober 2000 - 19:24 #7
andreas>> som der står i mit SPM!
C:\\PHP4\\PHP.EXE d:\\sti\\script.php

steffen>> hmm er du sikker? det virker jo fint når det køres via PHP_ISAPI.DLL men ikke gennem PHP.EXE

er du virkelig sikker på at det har noget med det at gøre?
Avatar billede andreas Nybegynder
22. oktober 2000 - 19:29 #8
jeg er enig med steffen....
Avatar billede mbb Nybegynder
22. oktober 2000 - 19:53 #9
steffen>> jeg tror ik det har noget med det at gøre.

det som sker er, at der bliver valgt de forkerte vittigheder i linjerne
\"SELECT ent_item_ID FROM ent_item WHERE ent_mailstatus_ID=1 $Q $Q2\";
og \"SELECT ent_item_ID FROM ent_item WHERE approved=\'Y\' $Q\";

men det er nok den første der bruges...
Avatar billede steffen Nybegynder
22. oktober 2000 - 20:22 #10
Det er alt der skal til.

Grunden til, at det virker med PHP_ISAPI.DLL er formentligt, at den jo som bekendt beholdes i memory når først den er loaded. Så hvis bare der er et andet script et sted, hvor linien er husket el. lign, er det nok ..

Men sæt linien ind, så skal du bare se løjer.
Avatar billede mbb Nybegynder
22. oktober 2000 - 20:52 #11
jeg prøver... men det har tidligere virket på en linux maskine med apache og PHP3 - og som du kan se bruges random funktionen kun til at sætte vittighederne i tilfældig rækkefølge
Avatar billede mbb Nybegynder
22. oktober 2000 - 21:04 #12
jeg prøver nu at sætte
mt_srand ((double) microtime() * 1000000);
ind øverst i den fil med ovenstående script
Avatar billede mbb Nybegynder
22. oktober 2000 - 21:28 #13
FÅRK man det virker sgu! jeg kan godt se det nu, den tager jo et tilfældigt af de ID numre den har fundet... og hvis man ik har seed\'et rand() så tager den det samme hver gang...

tak tak!
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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