Home
Home Page
Web Bases with LWP
Transformation relative in absoljutye links
For the greater information read the full documentation on LWP:: UserAgent.
Accessing HTTPS URLs
Job with the text and graphic data in common in PHP and MySQL
Change of appearance of the counter in CNStats
Simple banner system phpFBS
How to protect a site from total uploading.
21 mistake of programmer PHP
API functions
Minuses of use API of functions
Generation of the image
The guest book step by step
The guest book on PHP/MySQL
PHP - Simple caching
Even about protection e-mail addresses on webs - pages
Language of web - statistics
Program extract of the bill in system WebMoney
Language of web - statistics
Links

 

PHP - Simple caching

What should be on the main page?? Correctly, there should be ponemnozhku from each unit of a site. And certainly your page is under construction automatically, proceeding from contents of forums, news lines and other sections of a site.


How much SQL searches it is carried out at loading the main page?? How much blocks are pumped up from other sites??


Now we shall consider a simple and effective way of caching of such data.


As an example we shall consider a case of import of news from the external server: http://news.novgorod.ru/ultramode.txt


Our problem{task} to receive this file, to process it{him} and to deduce{remove} to his{its} user. The program doing{making} it, looks as follows:



<?

$d = file (" http: // news.novgorod.ru/ultramode.txt ");

for ($i=0; $i <11; $i ++) {

$msg = $ d [2 + $ i*8];

        $url = $ d [3 + $ i*8];

        $date = $ d [4 + $ i*8];

        print " <a href ='http: // news.novgorod.ru " .trim ($url). " '> ";

        print trim ($msg.) " </a> (". $date. ")";

}

?>


At each loading our page there is a reference{manipulation} to the external server news.novgorod.ru, therefrom under report HTTP the file ultramode.txt is downloaded. And now we shall present a situation, that the server is on the other end of a planet and connection and furthermore the file transfer borrows{occupies} enough more time. Or moreover, the server can be temporarily inaccessible.


Conclusion. What for each time podgruzhat` a file ultamode.txt if news are updated not more often than an once at two - three o'clock?? Correctly. It is necessary kehshirovat`.


And we shall do{make} it very simply. As you could notice, the comment is stored{kept} in the first line of a file. The comment is not necessary for us and on his{its} place it is possible to place date of last updating of a file wonderfully.


Algorithm of job the following:


1. We read - out kehshirovannuju the version

2. If kehshirovannaja the version is obsolete, on its{her} place we read - out a file http://news.novgorod.ru/ultramode.txt, we replace the first line with current time and is saved in a cache.

3. We make out and is deduced{removed} given to the user.


The code making all this is below resulted:



<?

// We read - out a file from a cache

$d = file ("/tmp/news.cache");

$fs=trim ($d [1]);

// If the file was not updated 3600 seconds (1 hour) or the file is empty,

// That we update it{him}

if (intval ($d [0]) <time ()-600 || empty ($fs)) {

        $d = file (" http: // news.novgorod.ru/ultramode.txt ");

        $fs=trim ($d [1]);

        // We save new versju in a cache

        if (! empty ($fs)) {

                $fw=fopen ("/tmp/news.cache", "wt");

                flock ($fw, LOCK_EX);

                // In the first line we shall write down current time

                fputs ($fw, time (). "n");

                // We shall save other lines

                for ($i=1; $i <count ($d); $i ++) fputs ($fw, trim ($d [$i]). "n");

                fclose ($fw);

}

        // If, for some reason, the file has not been downloaded,

        // That we shall use kehshirovannoj the version

        else $d = file ("/tmp/news.cache");

}


// A conclusion of the data

for ($i=0; $i <11; $i ++) {

$msg = $ d [2 + $ i*8];

$url = $ d [3 + $ i*8];

$date = $ d [4 + $ i*8];

print " <a href ='http: // news.novgorod.ru " .trim ($url). " '> ";

        print trim ($msg.) " </a> (". $date. ")";

}


That's all. In the same way it is possible kehshirovat` and SQL searches. Using this mechanism I managed to reduce time of creation of the main page with 1.5 sek till 0.05 sek


How to send letters PHP attachami

How to send the letter in HTML a kind? Attach to the letter attach with the name message.html and the letter to turn to the HTML-letter!



<?

// Functions. It is possible to bear{take out} in dpugoj a file.


class html_mime_mail {

var $headers;

var $multipart;

var $mime;

var $html;

var $parts = array ();


function html_mime_mail ($headers = "") {

$this-> headers = $ headers;

}


function add_html ($html = "") {

$this-> html. = $ html;

}


function build_html ($orig_boundary, $kod) {

$this-> multipart. = " - $orig_boundaryn ";

if ($kod == 'w' || $kod == 'win' || $kod == 'windows-1251') $kod ='windows-1251 ';

else $kod ='koi8-r ';

$this-> multipart. = " Content-Type: text/html; charset = $ kodn ";

$this-> multipart. = " BCC: del@ipo.spb.run ";

$this-> multipart. = " Content-Transfer-Encoding: Quot-Printednn ";

$this-> multipart. = " $ this-> htmlnn ";

}



function add_attachment ($path = "", $name = " ", $c_type = "application/octet-stream") {

if (! file_exists ($path. $ name)) {

print " File $path. $ name dosn't exist. ";

return;

}

$fp=fopen ($path. $ name, "r");

if (! $fp) {

print " File $path. $ name coudn't be read. ";

return;

}

$file=fread ($fp, filesize ($path. $ name));

fclose ($fp);

$this-> parts [] =array ("body" => $file, "name" => $name, "c_type" => $c_type);

}



function build_part ($i) {

$message_part = "";

$message_part. = " Content-Type: ". $this-> parts [$i] ["c_type"];

if ($this-> parts [$i] ["name"]! = " ")

$message_part. = "; name = " ". $this-> parts [$i] ["name."] " "n";

else

$message_part. = "n";

$message_part. = " Content-Transfer-Encoding: base64n ";

$message_part. = " Content-Disposition: attachment; filename = " ".

$this-> parts [$i] ["name."] " "nn";

$message_part. = chunk_split (base64_encode ($this-> parts [$i] ["body"])). "n";

return $message_part;

}



function build_message ($kod) {

$boundary = " = _ ".md5 (uniqid (time));

$this-> headers. = " MIME-Version: 1.0n ";

$this-> headers. = " Content-Type: multipart/mixed; boundary = " $ boundary "n";

$this-> multipart = "";

$this-> multipart. = " This is a MIME encoded message.nn ";

$this-> build_html ($boundary, $kod);

for ($i = (count ($this-> parts)-1); $i> =0; $i-)

$this-> multipart. = " - $boundaryn ". $this-> build_part ($i);

$this-> mime = " $this-> multipart - $boundary - n ";

}



function send ($server, $to, $from, $subject = "", $headers = "") {


$headers = " To: $tonFrom: $fromnSubject: $subjectnX-Mailer: The Mouse! n$headers ";

$fp = fsockopen ($server, 25, both $errno, and $errstr, 30);

if (! $fp)

die (" Server $server. Connection failed: $errno, $errstr ");

fputs ($fp, " HELO $servern ");

fputs ($fp, " MAIL FROM: $fromn ");

fputs ($fp, " RCPT TO: $ton ");

fputs ($fp, "DATAn");

fputs ($fp, $this-> headers);

if (strlen ($headers))

fputs ($fp, "$headersn");

fputs ($fp, $this-> mime);

fputs ($fp, "n.nQUITn");

while (! feof ($fp))

$resp. = fgets ($fp, 1024);

fclose ($fp);

}

}



// *************************************************************************

//

// In quality attacha ppisoedinjaem the html-letter (opens automatically).

// The second attach - some file from the catalogue.

// So to cause all that is written above:

//

// *************************************************************************



$mail=new html_mime_mail ();

$mail-> add_html (" <html> <body> <center> <h2> Ppivet! <br> <br> ".

" <br> I Send a binary file [/bin/ls...] ".

" </h2> </center> </body> </html> ");

$mail-> add_attachment ("/bin / ", "ls");

$mail-> build_message (' win '); // if not "win", kodipovka koi8

$mail-> send (' POCHTOVYJJ_KHOST_VASHEGO_PROVAJJDERA ',

' TO WHOM _ (E-MAIL) ',

' OT_KOGO _ (E-MAIL) ',

' SUBJECT OF THE LETTER ');


//

// After arrival of the letter we swing on FTP original/bin/ls and it is compared with

// Imported from the letter:

//

// X:temp> fc/b ls ls2

// Comparison of files ls and LS2

// FC: distinctions are not found

//

//

// Attention! If you do not have file/bin/ls it is simple zakommentirujte a line

// $mail-> add_attachment ("/bin / ", "ls") that the program did not try to attach

// To the letter necuhhestvujuhhie files.

//



?>