/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Problem med imap-funktioner
Fra : Mads Lie Jensen


Dato : 28-12-03 11:16

Hej

Jeg roder lidt med læsning af imap-foldere med php. Men det driller
umanerlig meget og jeg ved ikke helt om jeg gør noget forkert eller om
det er fordi imap-understøttelsen i php er gået i ged her hos mig.

Det er i nedenstående der sker mærkelige ting, kommentarer indsat som
forklarer hvad.

<?php
$mbox = imap_open("{localhost:143/notls}INBOX", "username", "password");
echo "<p><h1>Mailboxes</h1>\n";
$folders = imap_list($mbox, "{localhost}", "*");

if ($folders == false) {
echo "Call failed<br>\n";
} else {
while (list ($key, $val) = each ($folders)) {
echo $val."<br>\n";
}
}

// Listen over foldere skrives ud og er som forventet.

echo "<pre>";
print_r(imap_check($mbox));
echo "</pre>";

// Er også korrekt, skriver antallet af beskeder i INBOX.

echo "<p><h1>Headers in INBOX</h1>\n";
$headers = imap_headers($mbox);
if ($headers === false) {
echo "Call failed<br>\n";
} else {
   if (count($headers) == 0) {
      echo "mailbox er tom<br>";
   } else {
      while (list ($key,$val) = each ($headers)) {
         echo $val."<br>\n";
      }
   }
}

/*
Det går galt - der bliver ikke hentet nogle headers, selv om
imap_check() ovenfor viste at der var beskeder i folderen.
Hvad kan det skyldes?
*/

$status = imap_status($mbox,"{localhost}INBOX.test",SA_ALL);
echo "<pre>";
print_r($status);
echo "</pre>";

// Status viser også at der er beskeder i folderen.

echo "Num: " . imap_num_msg($mbox);

// Giver 0 - altså heller ingen beskeder.

$errors = imap_errors();
echo "<pre>";
print_r($errors);
echo "</pre>";

// Viser ingen fejl.

imap_close($mbox);
?>

Hvad kan det skyldes? Jeg kan fint se status og at der er beskeder, men
den vil bare ikke hente beskederne (eller listne over dem).

Det er på en apache 1.3.27 med php 4.3.4. Imap på maskinen er en
Courier-imap 2.2.1 og den virker som den skal (så vidt jeg da kan se).
Hvis jeg bruger mozillas mailklient er der adgang til alle mailfoldere
og den kan fint hente nye mails osv.


--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/

 
 
Kim Emax (28-12-2003)
Kommentar
Fra : Kim Emax


Dato : 28-12-03 14:52

Mads Lie Jensen wrote:

> echo "<p><h1>Headers in INBOX</h1>\n";
> $headers = imap_headers($mbox);
> if ($headers === false) {

er det bevidst at du har 3 lighedstegn her? Imiddelbart ser jeg ingen grund
til at teste på om de er af samme type (og det burde fejle anyway?) prøv med
= = og ikke = = =

> Det er på en apache 1.3.27 med php 4.3.4. Imap på maskinen er en
> Courier-imap 2.2.1 og den virker som den skal (så vidt jeg da kan se).

Så har jeg et modspørgsmål Har du kompilet dette i hånden og med DSO?
Det driller sygt for mig pt :-/, så jeg er lidt nysgerrig for om du har din
kompileringssyntax liggende tilgængeligt...

--
Take Care
Kim Emax - master|minds: http://www.masterminds.dk - Vi tænker IT for
dig... http://www.emax.dk - http://www.ayianapa.dk
Køb din vin online på http://www.gmvin.dk,
Danmarks måske mest avancerede VinWebShop



Mads Lie Jensen (28-12-2003)
Kommentar
Fra : Mads Lie Jensen


Dato : 28-12-03 15:53

On Sun, 28 Dec 2003 14:51:46 +0100, "Kim Emax"
<newsgroup@remove-emax.dk> wrote:

>> echo "<p><h1>Headers in INBOX</h1>\n";
>> $headers = imap_headers($mbox);
>> if ($headers === false) {
>
>er det bevidst at du har 3 lighedstegn her? Imiddelbart ser jeg ingen grund
>til at teste på om de er af samme type (og det burde fejle anyway?) prøv med
>= = og ikke = = =

Ja, det er med vilje - eksemplet er delvist hugget fra phpmanualen - der
blev kun brugt == og det brugte jeg også først - det virkede bare dumt
.... og så mente jeg at have set at imap_headers returnerede false ved
fejl, men en tom array ved ingen beskeder - det kan jeg så ved nærmere
eftersyn se at den ikke gør.
Men det gør ingen forskel om jeg bruger == eller ===.

Den ser bare ikke beskederne.

>> Det er på en apache 1.3.27 med php 4.3.4. Imap på maskinen er en
>> Courier-imap 2.2.1 og den virker som den skal (så vidt jeg da kan se).
>
>Så har jeg et modspørgsmål Har du kompilet dette i hånden og med DSO?
>Det driller sygt for mig pt :-/, så jeg er lidt nysgerrig for om du har din
>kompileringssyntax liggende tilgængeligt...

php er compilet i hånden, apache er fra min SuSE-installation - jeg har
ingen grund til at compile apache selv.

Hvis det er hvordan php er kompileret, så kan jeg da godt sende det itl
dig.


--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/

Mads Lie Jensen (28-12-2003)
Kommentar
Fra : Mads Lie Jensen


Dato : 28-12-03 20:17

On Sun, 28 Dec 2003 11:16:04 +0100, Mads Lie Jensen <mads@gartneriet.dk>
wrote:

>echo "<p><h1>Headers in INBOX</h1>\n";
>$headers = imap_headers($mbox);
>if ($headers === false) {
> echo "Call failed<br>\n";
>} else {
>   if (count($headers) == 0) {
>      echo "mailbox er tom<br>";
>   } else {
>      while (list ($key,$val) = each ($headers)) {
>         echo $val."<br>\n";
>      }
>   }
>}
>
>/*
>Det går galt - der bliver ikke hentet nogle headers, selv om
>imap_check() ovenfor viste at der var beskeder i folderen.
>Hvad kan det skyldes?
>*/

Nu bliver jeg endnu mere forvirret - hvis jeg kører mit script fra
kommandolinien med:

php scriptnavn.php

Så kan den _godt_ vise indholdet af min mailbox - men
kommandolinie-php'en er kompileret i samme omgang som den php der kører
på webserveren.

Kan det måske være noget med rettigheder? Jeg mener, php på webserveren
bliver kørt af brugeren wwwrun med et ret højt uid, fra kommandolinien
bliver det kørt som min egen bruger, med et uid på i omegnen af 500.

Så er det bare rettigheder til hvad og for hvem ....

--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/

Mads Lie Jensen (28-12-2003)
Kommentar
Fra : Mads Lie Jensen


Dato : 28-12-03 21:21

On Sun, 28 Dec 2003 20:16:50 +0100, Mads Lie Jensen <mads@gartneriet.dk>
wrote:

>Nu bliver jeg endnu mere forvirret - hvis jeg kører mit script fra
>kommandolinien med:
>
>php scriptnavn.php
>
>Så kan den _godt_ vise indholdet af min mailbox - men
>kommandolinie-php'en er kompileret i samme omgang som den php der kører
>på webserveren.
>
>Kan det måske være noget med rettigheder? Jeg mener, php på webserveren
>bliver kørt af brugeren wwwrun med et ret højt uid, fra kommandolinien
>bliver det kørt som min egen bruger, med et uid på i omegnen af 500.
>
>Så er det bare rettigheder til hvad og for hvem ....

.... det er næppe noget med rettigheder - hvis jeg logger ind på serveren
som brugeren wwwrun og kører scriptet fra kommandolinien med php
<scriptnavn.php> så vises _også_ alle beskederne i den mailbox - men
samme script kørt genne apache, viser ikke noget ...

Jeg er meget forvirret og meget træt af det her efterhånden ....


--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/

Mads Lie Jensen (01-01-2004)
Kommentar
Fra : Mads Lie Jensen


Dato : 01-01-04 20:31

On Sun, 28 Dec 2003 21:20:34 +0100, Mads Lie Jensen <mads@gartneriet.dk>
wrote:

>... det er næppe noget med rettigheder - hvis jeg logger ind på serveren
>som brugeren wwwrun og kører scriptet fra kommandolinien med php
><scriptnavn.php> så vises _også_ alle beskederne i den mailbox - men
>samme script kørt genne apache, viser ikke noget ...
>
>Jeg er meget forvirret og meget træt af det her efterhånden ....

Jeg har puslet videre med sagen.

en
imap_check($mbox) returnerer dataene:

stdClass Object
(
[Date] => Thu, 1 Jan 2004 20:20:12 +0100 (CET)
[Driver] => imap
[Mailbox] =>
{localhost:143/imap/notls/user="axel@mail.palustris.dk"}INBOX
[Nmsgs] => 5
[Recent] => 0
)

Nmsgs er 5 - selv om mailboksen altså er tom, og den burde være 0.

Det mest mystiske er at for hver gang jeg kalder imap_check($mbox) så
stiger Nmsgs med een.

Den stiger også med en hvis jeg kalder imap_status() - selv om der
stadig ikke er beskeder i boksen.

Fejlen sker dog stadig kun når scriptet køres via apache - hvis det
køres fra kommandolinien, så opfører det sig som forventet.

Men jeg er stadig ikke nærmere en løsning på problemet (min imap-server
crasher hvis man forsøger at hente en besked som ikke findes, hvilket
man jo nemt kommer til når der rapporteres flere beskeder i mailboksen
end der rent faktisk er).


--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
http://www.gartneriet.dk
Kig også ind på http://hjoerringnyplanteskole.dk/

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408934
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste