12.09.2013 Views

denna info - Ingemar Ceicer

denna info - Ingemar Ceicer

denna info - Ingemar Ceicer

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!