denna info - Ingemar Ceicer
denna info - Ingemar Ceicer
denna info - Ingemar Ceicer
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
v. 2 [2006-09-13]<br />
Förutsättningar<br />
Jag har använt Sendmail, PHP och MySQL. Du måste kunna komma åt inställningarna för<br />
Sendmail. Kunna köra någon databas och servern måste ha PHP installerat.<br />
PHP skall vara kompilerat för CLI, 'Command Line Interface'. Är det kompilerat för CGI gör<br />
man på ett annat sätt. Det tar jag inte upp här. (Det liknar hur man gör med till exempel Perl)<br />
För att ta reda på hur PHP är kompilerat kör du:<br />
$>php -v<br />
Står det sedan något som liknar:<br />
PHP (cli) (built: May 8 2006 23:54:39)<br />
Är allt OK.<br />
Inställningar på servern<br />
Sendmail<br />
Du lägger till ett e-postalias i filen '/etc/mail/aliases'<br />
tst: "| /usr/local/bin/php /path_to_script/mitt_script.php"<br />
Apostroferna skall vara med. Du skapar ett e-postalias 'tst', all post till 'tst@my_domain.com'<br />
kommer nu med hjälp av '|' (pipe) tecknet att skickas till skriptet 'mitt_script.php'.<br />
sedan måste du köra:<br />
$>newaliases<br />
För att generera en databasfil ('aliases.db') från textfilen 'aliases'. Glöm inte att starta om<br />
sendmail efteråt. (Slackware: '/etc/rc.d/rc.sendmail restart').<br />
PHP<br />
'mitt_script.php' måste vara körbart, detta åstadkommer du med kommandot:<br />
$>chmod 755 mitt_script.php<br />
lägg om möjligt skriptet i en katalog som inte andra kommer åt. Inte i 'public_html' där det<br />
kan nås av hela världen.
Skriptet<br />
Överst i 'mitt_script.php' skall det stå:<br />
#!/usr/local/bin/php<br />
Detta för att tala om vilket program som skall köra skriptet.<br />
(Pröva med "$>whereis php" för att kolla var php finns i din distrubition)<br />
Innanför<br />
´´<br />
skriver du själva skriptet.<br />
// För PHP > 5 (OBS! har du äldre php så får du skriva lite annorlunda)<br />
$fd = fopen("php://stdin", "r");<br />
//Öppnar en ström för läsning<br />
$alltx = stream_get_contents($fd);<br />
//hela e-postbrevet hamnar i '$alltx'<br />
$allt=utf8_decode($alltx);<br />
//jag får min e-post kodad enligt UTF-8<br />
//Nu skall den dekodas innan den hamnar i databasen<br />
fclose($fd)<br />
//Strömmen stängs<br />
Sedan söker jag efter markörer i texten för att hitta det som är intressant, i detta fall själva<br />
bilden:<br />
$bild_start = strpos($alltx,"/9j");<br />
//Första positionen för '/9j'<br />
$bild_slut = strpos($alltx,"/9k");<br />
//Första positionen för '/9k'<br />
$bild = trim(substr($alltx,$bild_start-1,($bild_slut-$bild_start+4)));<br />
//Bilden börjar och slutar med detta, så däremellan ligger bilden<br />
//Observera att här används '$allt' inte '$alltx', bilden är<br />
//inte kodad med UTF-8<br />
//trim() tar bort oönskade radbrytningar i början och i slutet<br />
Nu har vi fångat bilden i en variabel '$bild', nu skall den hamna i en databas. Du gör på<br />
samma sätt med annat som du vill ha med, tillexempel 'subject', 'bildtext' mm.<br />
Bilden, som består av en massa tecken, är kodad med 'Base64'. Det innebär att ett talsystem<br />
med basen 64 används för att lagra <strong>info</strong>rmationen. Vi använder ju normalt basen 10.<br />
Tryckbara ASCII tecken används vid kodningen. Problemet är att Microsoft Internet Explorer<br />
inte klarar detta. Man måste använda en modernare webbläsare, till exempel Firefox eller<br />
Opera.<br />
kolla ett exempel
För att alla webbläsare skall klara av det här kan man ta hjälp av PHP<br />
echo "";<br />
//Här låter man 'bild.php' ladda in bilden. img får värdet av aktuell<br />
nyckel.<br />
//På så sätt laddas rätt bild.<br />
I filen 'bild.php' ser det ut så här:<br />
På detta sätt får jag en bra formatering. Detta sparas som en mall. Det gör det lätt när man<br />
skall skicka igen. Det är också lätt att hitta dessa markörer. Enda nackdelen är om man vill<br />
kunna skicka text som ser precis så här ut.<br />
$subject_start = strpos($allt,"");<br />
$subject_slut = strpos($allt,"");<br />
$subject = trim(substr($allt,$subject_start+8,($subject_slut-<br />
$subject_start-8)));<br />
sv_bokstavar(&$subject);<br />
//trim() tar bort oönskade radbrytningar i början och i slutet<br />
Sedan är det bara att leta reda på det som finns mellan taggarna med 'stpos()' och 'substr()'.<br />
function sv_bokstavar($str)<br />
{<br />
$str=str_replace("=C3=A5","å",$str);<br />
$str=str_replace("=C3=A4","ä",$str);<br />
$str=str_replace("=C3=B6","ö",$str);<br />
$str=str_replace("=C3=85","Å",$str);<br />
$str=str_replace("=C3=84","Ä",$str);<br />
$str=str_replace("=C3=96","Ö",$str);<br />
}<br />
Av någon anledning, som jag inte förstår fungerar inte UTF-8 kodningen när jag skickar en<br />
bild från mobiltelefonen. Därför <strong>denna</strong> 'workaround'. Om jag bara skickar text och ingen bild<br />
fungerar det som det skall utan <strong>denna</strong> funktion.<br />
Databaser<br />
Jag har använt en databas med två tabeller, en tabell med bilden och texten. En annan tabell<br />
som håller reda på hur många bilder som finns. OBS! Använd 'mediumtext' för bilden, så att<br />
den får plats.<br />
tb_phone<br />
Namn Datatyp<br />
nyckel (primary key) int<br />
subject char(100)<br />
bildtext char(100)<br />
text char(200)<br />
anlant datatime<br />
bild mediumtext<br />
is_bild enum('ja','nej')<br />
Ladda ner | alla_filer.zip | alla_filer.tar.gz |<br />
tb_antalposter<br />
Namn Datatyp<br />
nyckel (primary key) int<br />
tabell tinyint<br />
antalposter int<br />
tele_mail.php (skriptet som läser in e-posten)<br />
bild.php (skriptet som läser in bilden från db)<br />
index2.php (vanliga användarfilen)<br />
admin.php (administration, du kan ändra och ta bort)<br />
<strong>denna</strong> <strong>info</strong> i pdf-format
Licens<br />
© 2006 <strong>Ingemar</strong> <strong>Ceicer</strong><br />
Licensierat under GNU General Public License<br />
This program is free software; you can redistribute it and/or<br />
modify it under the terms of the GNU General Public License<br />
as published by the Free Software Foundation; either version 2<br />
of the License, or (at your option) any later version.<br />
This program is distributed in the hope that it will be useful,<br />
but WITHOUT ANY WARRANTY; without even the implied warranty of<br />
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br />
GNU General Public License for more details.<br />
You should have received a copy of the GNU General Public License<br />
along with this program; if not, write to the Free Software<br />
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.<br />
http://www.gnu.org/licenses/gpl.txt