LAMPMedlem sedan mars 2002729 inlägg
hej!
jag har ett nyhetsbrev med väldigt många medlemmar (dryga tusen). Hade först det lagrat i en databas och loopade ut breven med funktionen mail(), vilket tar ohyggligt lång tid (script timeout). Fick rådet av administratören på webhotellet att göra på annat vis.
Nu har jag tre textfiler:
* adresser.txt
* meddelandet.txt
* utskick.sh
kodsnutten i utskick.sh ser ut så här:
#!/bin/bash
ADRESSLISTA=$1
BREVET=$2
cat $ADRESSLISTA |
while read ADRESS ; do
RETURADRESS=`echo $ADRESS | sed 's/@/AT/'`.nyhetsbrev@mindomän.com
echo skickar till $ADRESS
( echo To: $ADRESS
cat $BREVET
echo Detta brev var skickat till $ADRESS
echo Om du inte vill ha fortsatta utskick så vänligen
echo kontakta minadress@mindomän.com. Tack. ) |
/usr/sbin/sendmail -f $RETURADRESS $ADRESS
done
Skickar sedan mailen med
$ chmod 700 utskick.sh
$ chmod 600 adresser.txt
$ chmod 600 meddelandet.txt
$ ./utskick.sh adresser.txt meddelandet.txt
visar resultat...
$ _
Nu till frågan, kan jag göra en enkel admin i PHP som utför uppgiften i utskick.sh och tar emot "nyheten" från ett formulär istället, så att man slipper logga in på SSH var gång?
SPiNMedlem sedan mars 20005 832 inlägg
En tråd jag missat. :)
Kanske något sånt här fungerar?
<?php
if( $_POST[ 'msg' ] == "" ) {
echo "<form action=\"" . $_SERVER[ 'PHP_SELF' ] . "\" method=\"POST\">";
echo "<textarea name=\"msg\" id=\"msg\"></textarea>";
echo "<input type=\"submit\" />";
echo "</form>";
exit;
}
$brevMeddelande = $_POST[ 'msg' ];
$filPekare = fopen( "meddelandet.txt", 'w' );
fputs( $filPekare, $brevMeddelande );
fclose( $filPekare );
exec( "./utskick.sh adresser.txt meddelandet.txt", $output );
// passthru( "./utskick.sh adresser.txt meddelandet.txt" );
...
?>
exec() exekverar din bash-kommando och resultatet hamnar i arrayen $output så att du kan behandla informationen. Behöver du inte behandla den, kan du lika gärna passthru() som skickar all information direkt tillbaka till klienten.
Hoppas nu att det var nåt sånt du menade. :)
LAMPMedlem sedan mars 2002729 inlägg
Den skickar in meddelandet från formuläret i textfilen. Men det skickas aldrig iväg några mail. Jag får inte heller några felmeddelanden. :(
SPiNMedlem sedan mars 20005 832 inlägg
Testa med att sätta:
error_reporting( E_ALL );
högst upp i ditt dokument, så får vi se om några notice:es kastas.
LAMPMedlem sedan mars 2002729 inlägg
nej, ingenting då heller :(
SPiNMedlem sedan mars 20005 832 inlägg
Testa följande då:
Kommentera bort raden med exec() i din PHP. Direkt efter att PHP-dokumetet exekverats klart, går du in i kommandoprompten och skriver ditt kommando manuellt:
$ ./utskick.sh adresser.txt meddelandet.txt
Fungerar det då?
LAMPMedlem sedan mars 2002729 inlägg
Ja, det verkar fungera utan större beskymmer. :(
SPiNMedlem sedan mars 20005 832 inlägg
Det verkar ju väldigt skumt. Du har inte satt safe_mode till on i php.ini?
LAMPMedlem sedan mars 2002729 inlägg
Det är på webhotellet jag testkör. Kommer ij åt PHP.INI vad jag vet. Kan man få ut den infon med
php_info() ?
SPiNMedlem sedan mars 20005 832 inlägg
Jäpp. Och som en liten notis kan jag lägga till att de flesta webhotell brukar köra med safe_mode påslaget.
LAMPMedlem sedan mars 2002729 inlägg
Jo, så var fallet. Får se mig i stjärnorna efter detta och använda mig av kommandopromten även i fortsättningen.
Tack för ditt deltagande SPIN!