Potresti anche aver sentito parlare di design pattern e persino sfogliato questi meravigliosi libri:
- E. Gamma, R. Helm, R. Johnson, J. Vlissides “Tecniche di progettazione orientata agli oggetti. Modelli di progettazione";
- M. Fowler "Architettura delle applicazioni software aziendali".
Questo articolo sarà utile principalmente per i principianti. In ogni caso, spero che tra un paio d'ore sarai in grado di farti un'idea dell'implementazione del pattern MVC, che è alla base di tutti i framework web moderni, e anche di ottenere "spuntino" per ulteriori riflessioni su "come fallo." Alla fine dell'articolo c'è una selezione link utili, che ti aiuterà anche a capire in cosa consistono i framework web (oltre a MVC) e come funzionano.
È improbabile che i programmatori PHP esperti trovino qualcosa di nuovo in questo articolo, ma i loro commenti e commenti sul testo principale sarebbero molto utili! Perché Senza teoria la pratica è impossibile, e senza pratica la teoria è inutile, quindi prima ci sarà un po' di teoria e poi passeremo alla pratica. Se hai già familiarità con il concetto MVC, puoi saltare la sezione teorica e passare direttamente alla pratica.
1. Teoria Il pattern MVC descrive un modo semplice per strutturare un'applicazione, il cui scopo è separare la logica aziendale dall'interfaccia utente. Di conseguenza, l'applicazione è più facile da scalare, testare, mantenere e, ovviamente, implementare.Diamo un'occhiata al diagramma concettuale del pattern MVC (secondo me, questo è il diagramma di maggior successo che abbia mai visto):
Nell'architettura Modello MVC fornisce dati e regole di logica aziendale di cui è responsabile la vista interfaccia utente e il controller fornisce l'interazione tra il modello e la vista.
Un flusso tipico di un'applicazione MVC può essere descritto come segue:
Questo mostra la vista, diciamo pagina iniziale luogo.
che, ad esempio, contiene chiamate di modello che leggono informazioni dal database.
Il modello non dovrebbe interagire direttamente con l'utente. Tutte le variabili relative alla richiesta dell'utente devono essere elaborate nel controller.
Il modello non deve generare HTML o altro codice di visualizzazione che può cambiare a seconda delle esigenze dell'utente. Tale codice dovrebbe essere elaborato nelle visualizzazioni.
Lo stesso modello, ad esempio: il modello di autenticazione dell'utente può essere utilizzato sia nella parte utente che in quella amministrativa dell'applicazione. In questo caso, è possibile spostare il codice generale in una classe separata ed ereditarlo, definendo metodi specifici della sottoapplicazione nei suoi discendenti.
Visualizza: utilizzato per specificare la visualizzazione esterna dei dati ricevuti dal controller e dal modello.
Le viste contengono markup HTML e piccoli inserti di codice PHP per attraversare, formattare e visualizzare i dati.
Non dovrebbe accedere direttamente al database. Questo è ciò che dovrebbero fare i modelli.
Non dovrebbe funzionare con i dati ottenuti da una richiesta dell'utente. Questo compito deve essere eseguito dal responsabile del trattamento.
Può accedere direttamente alle proprietà e ai metodi di un controller o di modelli per ottenere dati pronti per l'output.
Le viste sono solitamente divise in un modello comune, contenente markup comune a tutte le pagine (ad esempio, un'intestazione e un piè di pagina) e parti del modello utilizzate per visualizzare l'output dei dati dal modello o visualizzare i moduli di immissione dati.
Il controller è il collante che collega modelli, viste e altri componenti applicazione funzionante. Il titolare del trattamento è responsabile del trattamento delle richieste degli utenti. Il controller non deve contenere query SQL. È meglio tenerli nei modelli. Il controller non deve contenere HTML o altri markup. Vale la pena di tenerlo in considerazione.
In un'applicazione MVC ben progettata, i controller sono generalmente molto sottili e contengono solo poche dozzine di righe di codice. Cosa non si può dire degli Stupid Fat Controllers (SFC) in CMS Joomla. La logica del controller è abbastanza tipica e la maggior parte viene trasferita alle classi base.
I modelli, al contrario, sono molto spessi e contengono la maggior parte del codice relativo all'elaborazione dei dati, perché la struttura dei dati e la logica aziendale in essa contenuta sono generalmente piuttosto specifiche per una particolare applicazione.
Spero che tu abbia già notato che diversi siti possono avere risultati perfetti formati diversi costruire una barra degli indirizzi. Ogni formato può visualizzare l'architettura di un'applicazione web. Anche se non è sempre così, nella maggior parte dei casi è un dato di fatto.
Consideriamo due opzioni per la barra degli indirizzi, che visualizzano del testo e un profilo utente.
Codice di elaborazione approssimativo in questo caso:
switch($_GET["action"]) ( case "about" : require_once("about.php"); // interruzione di pagina "Chi siamo"; case "contatti" : require_once("contacts.php"); // Interruzione di pagina "Contatti"; case "feedback": require_once("feedback.php"); // Interruzione di pagina "Feedback"; default: require_once("page404.php"); // interruzione di pagina "404"; )
Penso che quasi tutti lo abbiano già fatto prima.
Utilizzando un motore di routing URL, puoi configurare la tua applicazione per accettare richieste come questa per visualizzare le stesse informazioni:
http://www.example.com/contacts/feedback
Qui i contatti rappresentano il controller e il feedback è il metodo del controller dei contatti che visualizza il modulo feedback eccetera. Torneremo su questo argomento nella parte pratica.
Vale anche la pena sapere che i router di molti framework web ti consentono di creare percorsi URL personalizzati (specificare cosa significa ciascuna parte dell'URL) e regole per elaborarli.
Ora abbiamo sufficienti conoscenze teoriche per passare alla pratica.
Guardando al futuro, dirò che le classi principali Model, View e Controller verranno archiviate nella cartella principale.
I relativi figli verranno archiviati nelle directory controllers, models e views. Il file index.php è il punto di ingresso nell'applicazione. Il file bootstrap.php avvia il caricamento dell'applicazione, collegando tutti i moduli necessari, ecc.
Andremo in sequenza; Apriamo il file index.php e riempiamolo con il seguente codice:
ini_set("visualizzazione_errori", 1); require_once "application/bootstrap.php";
Non dovrebbero esserci domande qui.
Successivamente, andiamo immediatamente al file bootstrap.php:
require_once "core/model.php"; require_once "core/view.php"; require_once "core/controller.php"; require_once "core/route.php"; Percorso::inizio(); //avvia il router
Per ora le prime tre linee si collegheranno file inesistenti noccioli. Le ultime righe includono il file con la classe router e lo avviano per l'esecuzione chiamando il metodo di avvio statico.
RewriteEngine On RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule .* indice.php [L]
Questo codice reindirizzerà tutta l'elaborazione della pagina su index.php, che è ciò di cui abbiamo bisogno. Ricordate che nella prima parte abbiamo parlato di Front Controller?!
Metteremo il routing in un file separato route.php nella directory core. In questo file descriveremo la classe Route, che eseguirà i metodi del controller, che a loro volta genereranno la visualizzazione della pagina.
Contenuto del file route.php
class Route ( funzione statica start() ( // controller e azione predefinita $nome_controller = "Principale"; $nome_azione = "indice"; $routes = esplode("/", $_SERVER["REQUEST_URI"]); // ottieni il nome del controller if (!empty($routes)) ( $controller_name = $routes; ) // ottieni il nome dell'azione if (!empty($routes)) ( $action_name = $routes; ) // aggiungi prefissi $model_name = " Model_".$controller_name; $controller_name = "Controller_".$controller_name; $action_name = "action_".$action_name; // collega il file con la classe del modello (potrebbe non esserci un file del modello) $model_file = strtolower ($model_name). ".php"; $model_path = "application/models/".$model_file; if(file_exists($model_path)) ( include "application/models/".$model_file; ) // collega il file con la classe controller $controller_file = strtolower ($controller_name)..php"; $controller_path = "application/controllers/".$controller_file; if(file_exists($controller_path)) ( include "application/controllers/".$controller_file; ) else ( /* sarebbe corretto lanciare un'eccezione qui, ma per semplificare le cose, reindirizzeremo immediatamente alla pagina 404 */ Route::ErrorPage404(); ) // crea un controller $controller = new $controller_name ; $azione = $nome_azione; if(method_exists($controller, $action)) ( // chiama l'azione del controller $controller->$action(); ) else ( // anche qui sarebbe più saggio lanciare un'eccezione Route::ErrorPage404(); ) ) funzione PaginaErrore404( ) ( $host = "http://".$_SERVER["HTTP_HOST"]."/"; header("HTTP/1.1 404 Non trovato"); header("Stato: 404 non trovato"); header("Posizione:".$host."404"); ) )
Noto che la classe implementa una logica molto semplificata (nonostante il codice voluminoso) e potrebbe avere anche problemi di sicurezza. Questo è stato fatto intenzionalmente, perché... scrivere una classe di routing completa merita almeno un articolo a parte. Vediamo i punti principali...
L'elemento dell'array globale $_SERVER["REQUEST_URI"] contiene l'indirizzo completo a cui l'utente ha contattato.
Ad esempio: example.ru/contacts/feedback
Utilizzando la funzione esplodere L'indirizzo è diviso in componenti. Di conseguenza, otteniamo il nome del controller, nell'esempio fornito è controller contatti e il nome dell'azione, nel nostro caso - feedback.
Successivamente, il file del modello (il modello potrebbe mancare) e il file del controller, se presente, vengono collegati e infine viene creata un'istanza del controller e viene richiamata l'azione, ancora una volta, se era descritta nella classe del controller.
Pertanto, quando si accede, ad esempio, all'indirizzo:
esempio.com/portfolio
O
esempio.com/portfolio/index
Il router eseguirà le seguenti azioni:
esempio.com/ufo
quindi verrà reindirizzato alla pagina “404”:
esempio.com/404
La stessa cosa accadrà se l'utente accede a un'azione non descritta nel controller.2.2. Torniamo all'implementazione MVC Andiamo alla cartella core e aggiungiamo altri tre file al file route.php: model.php, view.php e controller.php
Lascia che ti ricordi che conterranno le classi base, che ora inizieremo a scrivere.
Contenuto del file model.php
Modello di classe (funzione pubblica get_data() ())
La classe del modello contiene un singolo metodo di recupero dei dati vuoto, che verrà sovrascritto nelle classi discendenti. Quando creeremo le classi discendenti tutto diventerà più chiaro.
Contenuto del file view.php
class View ( //public $template_view; // qui puoi specificare la vista generale predefinita. function generate($content_view, $template_view, $data = null) ( /* if(is_array($data)) ( // converte array elementi nelle variabili extract($data); ) */ include "application/views/".$template_view; ) )
Non è difficile indovinare che metodo creare destinato a formare una visione. Gli vengono passati i seguenti parametri:
per visualizzare il contenuto di una pagina specifica.
Nel nostro caso, il modello generale conterrà intestazione, menu, barra laterale e piè di pagina, e il contenuto delle pagine sarà contenuto in modulo separato. Ancora una volta, questo viene fatto per semplicità.
Contenuto del file controller.php
class Controller ( public $model; public $view; function __construct() ( $this->view = new View(); ) function action_index() ( ) )
Metodo indice_azione- questa è un'azione chiamata per impostazione predefinita; la sovrascriveremo quando implementeremo le classi discendenti.
Nella figura precedente, il file template_view.php è evidenziato separatamente: si tratta di un modello contenente markup comune a tutte le pagine. Nel caso più semplice potrebbe assomigliare a questo:
casa
Per dare al sito un aspetto presentabile, progettiamo Modello CSS e integrarlo nel nostro sito Web modificando la struttura del markup HTML e Connessioni CSS e file JavaScript:
Alla fine dell'articolo, nella sezione “Risultato”, è presente un collegamento a un repository GitHub con un progetto in cui si è proceduto all'integrazione di un semplice template.
classe Controller_Main estende Controller ( funzione action_index() ( $this->view->generate("main_view.php", "template_view.php"); ) )
Nel metodo creare un'istanza della classe View, vengono passati i nomi dei file del template generale e della view con il contenuto della pagina.
Oltre all'azione indice, il controller può ovviamente contenere altre azioni.
Archivia con vista generale abbiamo visto prima. Considera il file di contenuto main_view.php:
Benvenuto!
OLOLOSHA TEAM è un team di specialisti di prima classe nel campo dello sviluppo di siti Web con molti anni di esperienza nella raccolta di maschere messicane, statue in bronzo e pietra provenienti dall'India e da Ceylon, bassorilievi e sculture create da maestri dell'Africa equatoriale cinque o sei secoli fa...
Questo contiene markup semplice senza chiamate PHP.
Da visualizzare pagina principale Puoi utilizzare uno dei seguenti indirizzi:
Considereremo un esempio utilizzando una vista che mostra i dati ottenuti dal modello seguente. 2.3.2. Creare una pagina “Portfolio” Nel nostro caso, la pagina “Portfolio” è l'unica pagina che utilizza il modello.
Il modello solitamente include metodi di campionamento dei dati, ad esempio:
Inserisci il file del modello model_portfolio.php in cartella modelli. Ecco i suoi contenuti:
class Model_Portfolio extends Model ( public function get_data() ( return array(array("Anno" => "2012", "Sito" => "http://DunkelBeer.ru", "Descrizione" => "Sito promozionale del Birra scura Dunkel del produttore tedesco Löwenbraü prodotta in Russia dall'azienda produttrice di birra "SUN InBev."), array("Anno" => "2012", "Sito" => "http://ZopoMobile.ru", "Descrizione " => "Catalogo in lingua russa Telefoni cinesi Azienda Zopo attiva Basato su Android Sistema operativo e relativi accessori."), // todo); ) )
La classe del controller del modello è contenuta nel file controller_portfolio.php, ecco il suo codice:
class Controller_Portfolio estende Controller ( function __construct() ( $this->model = new Model_Portfolio(); $this->view = new View(); ) function action_index() ( $data = $this->model->get_data( ); $this->view->generate("portfolio_view.php", "template_view.php", $data); ) )
Ad una variabile dati viene scritto l'array restituito dal metodo ottieni_dati che abbiamo esaminato prima.
Questa variabile viene quindi passata come parametro del metodo creare, che contiene anche: il nome del file con il template generale e il nome del file contenente la vista con il contenuto della pagina.
La vista contenente il contenuto della pagina si trova nel file portfolio_view.php.
Portafoglio
Anno | Progetto | Descrizione |
Qui tutto è semplice, la vista mostra i dati ottenuti dal modello. 2.3.3. Creazione delle pagine rimanenti Le pagine rimanenti vengono create allo stesso modo. Il loro codice è disponibile nel repository GitHub, il cui collegamento è fornito alla fine dell'articolo, nella sezione “Risultato”.3. Risultato Ecco cosa è successo alla fine:
Screenshot del sito Web dei biglietti da visita risultante
Collegamento GitHub: https://github.com/vitalyswipe/tinymvc/zipball/v0.1
Ma in questa versione ho abbozzato le seguenti classi (e i loro tipi corrispondenti):
- Controller_Login in cui viene generata una vista con un modulo per l'inserimento di login e password, dopo aver compilato il quale viene eseguita la procedura di autenticazione e, in caso di esito positivo, l'utente viene reindirizzato al pannello di amministrazione.
- Contorller_Admin con un'azione di indicizzazione che controlla se l'utente è stato precedentemente autorizzato sul sito come amministratore (in tal caso viene visualizzata la vista del pannello di amministrazione) e un'azione di logout per disconnettersi.
Ma non è sempre consigliabile utilizzare framework web come Yii o Kohana, costituiti da diverse centinaia di file, quando si sviluppano semplici applicazioni web (ad esempio siti di biglietti da visita). Ora possiamo creare un bellissimo modello MVC in modo da non mescolare Php, Html, CSS e Codice JavaScript in un unico file.
Questo articolo è più un punto di partenza per imparare CMF che un esempio di qualcosa di veramente corretto che puoi utilizzare come base per la tua applicazione web. Forse ti ha anche ispirato e stai già pensando di scrivere il tuo microframework o CMS basato su MVC. Ma, prima di reinventare la prossima ruota con “blackjack e puttane”, ripensaci: forse sarebbe più ragionevole indirizzare i tuoi sforzi allo sviluppo e all’aiuto della comunità di un progetto già esistente?!
P.S.: L'articolo è stato riscritto tenendo conto di alcuni commenti lasciati nei commenti. Le critiche si sono rivelate molto utili. A giudicare dalla risposta: commenti, messaggi privati e numero di utenti che hanno aggiunto il post ai preferiti, l'idea di scrivere questo post si è rivelata non così male. Purtroppo non è possibile tenere conto di tutti i desideri e scrivere di più e in modo più dettagliato per mancanza di tempo... ma forse quei misteriosi individui che hanno sottovalutato la versione originale lo faranno. Buona fortuna con i tuoi progetti!
5. Una selezione di link utili sull'argomento L'articolo tocca molto spesso il tema dei web framework: questo è un argomento molto ampio, perché anche i microframework sono costituiti da tanti componenti sapientemente interconnessi e ci vorrebbe più di un articolo per parlarne componenti. Ho deciso però di presentare qui una piccola selezione di link (che ho seguito mentre scrivevo questo articolo) che in un modo o nell'altro riguardano il tema dei framework.Tag: aggiungi tag
Questo tutorial ti mostrerà come creare il modulo di contatto più semplice per un modello HTML.
Prima di tutto crea 2 file: contact_form.html e contact.php. Il primo file conterrà il codice per il tuo modulo di contatto e il secondo elaborerà i dati di questo modulo.
HTMLDi seguito è riportato un esempio del codice HTML del modulo di contatto:
Il tuo nome
La tua email
Messaggio
Nel browser apparirà così:
Diamo un rapido sguardo agli aspetti principali di questo modulo. Il tag deve avere 2 attributi aggiuntivi:
action="contact.php" - determina dove inviare i dati dal modulo di contatto dopo aver inviato la lettera.
metodo="post" - definisce come inviare i dati dal modulo di contatto a un file, specificato dall'attributo azione. I tag devono avere un attributo "nome" con un identificatore univoco. Questo attributo viene utilizzato per identificare i dati del modulo di contatto dopo l'invio di un'e-mail. Ci sono anche 2 elementi aggiuntivi da notare che vengono utilizzati come pulsanti Invia e Cancella, il primo elemento deve essere definito dal tag type="submit" e il secondo dal tag type="reset".La procedura per creare un modulo di contatto è abbastanza semplice.
PHPPassiamo alla creazione di un file contact.php che raccoglierà i dati dal modulo di contatto, lo comporrà in un messaggio e lo invierà via email. Scarica il file contact.php finito da questo link. Di seguito è riportato il codice del file con i commenti alle sue sezioni principali:
Assegnazione dei dati da ciascun campo del modulo di contatto (cf_name, cf_email, cf_message) alle seguenti variabili PHP ($cf_message, $field_email, $field_message) $field_name = $_POST["cf_name"]; $field_email = $_POST["cf_email"]; $field_message = $_POST["cf_message"];
La funzione $mail_to dovrebbe contenere l'email del proprietario del sito, questo è esattamente l'indirizzo a cui verranno inviati i messaggi. È possibile specificare più indirizzi contemporaneamente E-mail, separandoli con una virgola (ad esempio, [e-mail protetta], [e-mail protetta])
$mail_to = " [e-mail protetta]";
Oggetto della lettera che riceverai:
$subject = "Messaggio da un visitatore del sito ". $nome_campo;
Costruire una struttura del messaggio:
$body_message = "Da: ".$field_name."\n"; $body_message .= "E-mail: ".$field_email."\n"; $body_message .= "Messaggio: ".$field_message;
Costruzione delle intestazioni dei messaggi:
$headers = "Da: $cf_email\r\n"; $headers .= "Rispondi a: $cf_email\r\n";
Definiamo la funzione mail() e la assegniamo alla variabile $mail_status, che viene utilizzata per verificare se la lettera è stata inviata con successo.
$mail_status = mail($mail_to, $oggetto, $body_message, $headers);
Se la funzione mail() ha esito positivo, utilizzare il codice seguente:
If ($mail_status) ( ?> // Stampa un messaggio alert("Grazie per il messaggio. Ti contatteremo a breve."); // Reindirizza ad alcune pagine del sito. Puoi anche specificare l'URL completo, ad esempio http ://template-help.com window.location = "contact_page.html"; // Stampa un messaggio alert("Messaggio non riuscito. Per favore, invia un'e-mail a [e-mail protetta]"); // Reindirizza ad alcune pagine del sito. Puoi anche specificare l'URL completo, ad esempio http://template-help.com window.location = "contact_page.html";
Puoi scaricare file pronti contact_form.html e contact.php
IN Ultimamente Devo sempre più fare i conti con la mediocrità nell'IT. Gli amici chiedono consiglio e quando inizi a capire l'argomento, i tuoi capelli iniziano a rizzarsi in tutti i posti possibili. Scoprire quanto hanno pagato gli amici servizi simili, avverti un attacco di shock.
Decine di migliaia di rubli vengono semplicemente buttati via e invece di semplificare, gli imprenditori li ottengono ulteriori problemi. Forse qualcuno vedrà nella nota i problemi della propria organizzazione e potrà trarre le opportune conclusioni.
Ci sono persone a cui piace rimproverare tutti ed esaltare la propria conoscenza. Ci sono tali “mancini” in ogni campo. Forse nella loro pratica sono passati attraverso tubi di fuoco, acqua e rame e l'hanno fatto ogni diritto ragionare così. Nel campo Tecnologie informaticheÈ difficile incontrare persone che corrispondano a questa descrizione. Esistono troppe tecnologie ed è impossibile essere esperti in tutto.
Una persona può essere esperta in diversi settori, ma non in tutti. Ad esempio, la maggior parte del mio lavoro riguarda lo sviluppo di software. Mi sento molto più fiducioso in questo ambito che in quello amministrazione di sistema. Non discuterò mai con un amministratore severo sulle sfumature dell'instradamento dei pacchetti, perché... Io stesso ho una conoscenza superficiale.
Non sarà difficile per me configurare componenti server, impostare un FireWall o un gateway Internet, ma non cerco di perdere tempo studiando in dettaglio i livelli del modello OSI. Non me ne vergogno minimamente, perché... Mi interessa di più un'altra area.
Oggi ho avuto la possibilità di parlare con un tale esperto nel campo dei database. Un uomo che si definiva con orgoglio un professionista ha completamente rovinato il database della CSI e non ha nemmeno pensato di ammettere la sua colpa. Stava semplicemente effettuando un aggiornamento e qualcosa è andato storto. Backup Non voleva fare alcun aggiornamento prima di installarli (davvero, perché?) e quando si presentava un problema, non si preoccupava di scervellarsi. Ho appena caricato una copia di un mese fa e ho riferito del lavoro svolto.
Freddo? Sono quasi caduto dalla sedia per tanta professionalità. Non solo la politica non è stata creata Prenota copia, quindi questo artigiano non si è preso la briga di farne una copia prima operazione importante come aggiornare la struttura del database. Si è scoperto che l'oblio non era il suo problema principale.
Ho preso il numero di telefono di questo specialista e ho deciso di chiamarlo personalmente. Non si sa mai, all'improvviso la persona ha avuto buone ragioni per prendere questa decisione. Sarebbe meglio non chiamare. Non c'erano ragioni, ma c'era molta incompetenza e mancanza di conoscenze di base.
Ha cercato stupidamente di giustificarsi e le mie domande hanno solo causato sorpresa. Immagina, mi ha detto che il programma non utilizza tabelle. Tutto è memorizzato in un unico file. Queste parole hanno completamente ucciso i pezzi di fede in me per un risultato positivo. È stato lui a parlarmi di FireBird.
Poiché tutto è memorizzato in un file e il programma non può "leggere" questo file, è sufficiente tornare alla vecchia copia. Perché cercare di capire il problema e almeno risolverlo? Informazioni importanti direttamente dalle tabelle? Non aveva senso continuare ulteriormente la conversazione. Lo specialista ha semplicemente ucciso il lavoro delle persone in un colpo solo in mezzo mese e ha ricevuto una ricompensa.
Se la tua organizzazione non è pronta ad assumere uno specialista IT a tempo pieno, ti consiglio vivamente di documentare la tua strategia di interazione con una persona in arrivo. È necessario stabilire le sue responsabilità su carta e disporre di un elenco delle infrastrutture di cui è responsabile.
Questo non ti salverà dai problemi, ma ti darà comprensione chiara, cosa fa una persona e quali aree del suo lavoro richiedono maggiore attenzione. Ad esempio, se non capisci l'IT e la tua azienda dispone di database da cui dipende la vita dell'organizzazione, non lesinare sugli acquisti programma professionale per il backup. Lascia che sia lo specialista in visita a configurarlo e riceverai rapporti giornalieri via e-mail sui risultati del backup.
Non è un caso che ho iniziato a parlare Software, Perché in pratica, ho ritenuto che non tutti gli specialisti IT siano pronti ad automatizzare il processo di backup. O si assumono la responsabilità di creare copie da soli o semplicemente giocano alla roulette russa. Di conseguenza, l'unico perdente di questa situazione sei tu, il capo dell'azienda.
22/05/06 83,2KHai mai desiderato installare un modulo di feedback sul tuo sito web? Sicuramente hai incontrato script simili. Stranamente, gli script già pronti per l'invio di un modulo via e-mail sono molto popolari (puoi vederlo in qualsiasi archivio di script) e ce ne sono molti. Ce ne sono di semplici in cui non cambia nulla, e ce ne sono di complessi grandi sistemi, che operano su mysql, ti permettono di modificare dinamicamente qualsiasi campo, contengono un sacco di impostazioni... Ma sono davvero necessarie? Secondo me, la necessità di sistemi simili molto dubbioso.
Non potrai testare l'invio della posta sul tuo computer di casa. Per fare ciò avete bisogno di un hosting con supporto PHP e funzioni di invio di posta. Ti consiglio il provider di hosting runweb.ru. Questo fornitore offre ottime tariffe, velocità di accesso più elevate e un servizio eccellente.
Metodi di invio della postaEsistono due modi principali per inviare posta da un server utilizzando PHP.
Voglio esaminare entrambi questi metodi in ordine.
Il primo e più semplice è usare funzioni php posta(). La funzione è molto semplice e immediata, nonostante l'invio di posta da utilizzando la posta() presenta anche una serie di svantaggi. La cosa più importante è che la lettera non venga inviata direttamente, ma tramite PHP. Contemporaneamente programma php inserisce alcuni dei suoi campi nella lettera. Ad esempio, non sarai in grado di indicare correttamente il mittente. Nella maggior parte dei casi, il campo "da" (ovvero da chi proviene la lettera) conterrà il nome del server. Il fatto è che PHP inserisce le sue intestazioni nella riga di servizio della lettera "da".
Tuttavia, l'invio di posta utilizzando la funzione mail() rimane la soluzione più semplice
modo per inviare una lettera dal server. Diamo un'occhiata a questo metodo in modo più dettagliato.
La funzione mail() ha la seguente sintassi:
mail($a, $oggetto, $corpo, $intestazioni);
$to è l'indirizzo del destinatario. Per esempio, " [e-mail protetta]". $subject - l'oggetto della lettera. Ad esempio, "Hai ricevuto una lettera." $body - il testo del messaggio. $headers - qualsiasi intestazione della lettera. Ad esempio, l'indirizzo del mittente sarà simile a questo : "da: [e-mail protetta]".
Qui esempio completo invio di posta utilizzando mail():
posta(" [e-mail protetta]", "Oggetto della lettera", "Ciao! nHai ricevuto una lettera.", "da: nome_sito");
Tieni presente che quando utilizzi questa funzione su un computer di casa, potrebbe generare un errore perché non è possibile inviare un'e-mail senza un server di posta.
Ora vediamo come inviare un'e-mail utilizzando sendmail.
sendmail è programma standard sistema operativo unix che invia posta.
php può eseguire programmi Unix utilizzando lo strumento pipe. Questo strumento Unix ti consente di inviare dati da un programma a un altro, in modo simile a come scriviamo su un file. Solo il file in questo caso è il programma (in particolare sendmail) che riceve i dati.
Il programma sendmail ha molti parametri, ne utilizzeremo alcuni. Per utilizzare sendmail è necessario aprire una pipe verso di esso. In php questo viene fatto utilizzando il comando popen(), che è identico nella sintassi al comando fopen(). Usando popen() apriamo uno stream per sendmail
per scriverci (ricordate il parametro mode "w"?), dopodiché potrete inviargli i dati comando regolare fputs(). Vediamo come si presenta la procedura completa per inviare una lettera tramite sendmail:
In questo programma, la prima cosa che facciamo è descrivere le intestazioni rfc. rfc sono campi di servizio che contengono tutte le informazioni sulla lettera. Puoi vedere un esempio di RFC, ad esempio, nel programma il pipistrello! cliccando fare clic con il tasto destro posizionare il mouse sul testo della lettera e selezionare "intestazioni rfc-822" (il nome dell'articolo potrebbe differire). Per rimuoverli, ripetere i passaggi. Nell'intestazione descriviamo i campi "content-type", che indicano che la lettera è testo e nella codifica Windows-1251 (codifica Windows standard). "koi8-r" può anche essere usato come codifica, questa è una codifica Unix standard. In questo articolo non considereremo in dettaglio le possibili intestazioni RFC. Lo faremo un po' più tardi,
quando ci avviciniamo a lavorare con la posta. Quindi, dopo aver descritto le variabili del servizio e le intestazioni delle lettere, apriamo sendmail. Prestare attenzione al percorso del programma "/usr/sbin/sendmail". SU server diversi potrebbe differire!
Se questa riga non funziona, chiedi al tuo ISP dove si trova sendmail. Sono specificati i seguenti parametri: "-i -f$from - $recipients". Questi sono parametri standard per l'invio di una lettera e in essi sono inseriti due campi: $da - da chi, $destinatari - indirizzi dei destinatari. Nel nostro caso, la variabile $recipients contiene un solo indirizzo. Puoi infatti utilizzare più indirizzi, separati da uno spazio:
$destinatari = " [e-mail protetta] [e-mail protetta] [e-mail protetta]";
Successivamente, scriviamo prima le intestazioni del messaggio nello stream (la variabile $text_headers), quindi le separiamo con un'interruzione di riga e scriviamo il testo del messaggio. Ultimo passo— chiudere il flusso e verificare la presenza di errori. Se eseguito correttamente, viene inserito uno zero nella variabile $risultato e, se si verifica un errore, viene scritto il numero dell'errore.
Consideriamo ora un esempio di utilizzo delle funzionalità di invio della posta. Per fare ciò, creeremo un modulo di feedback che potrai installare sul tuo sito web. Utilizzeremo sendmail come metodo per inviare una lettera.
Creazione di un modulo di feedbackIl nostro modulo di feedback sarà uno script. Questo script visualizzerà il modulo e invierà l'e-mail.
contatto.php:
Feedback
Comunicazione diretta | ||
Il tuo nome: * | ||
La tua email: * | ||
Il tuo sito web: | ||
|
||
I campi contrassegnati da un asterisco (*) devono essere compilati.
Ora diamo un'occhiata a come funziona questo programma. L'esecuzione inizia con la riga “if (!$a) show_form();”, poiché prima viene specificata una funzione che, ovviamente, non viene eseguita. In questa riga controlliamo se c'è stato un tentativo di compilazione del form (dal form, come puoi vedere, viene passata la variabile $a, che viene controllata in questa riga). Se non è stato fatto alcun tentativo, viene chiamata la funzione show_form(), che visualizza il modulo.