Warning: Cannot modify header information - headers already sent by

Stampa
PDF

Oggi nel realizzare un semplice form per l'inserimento di dati in un db mysql mi sono imbattuto in questo errore che mi ha fatto perdere non poco tempo. Cercando su internet ho trovato diverse soluzioni al problema ma nessuna di queste faceva al caso mio. In pratica questo errore viene generato se queste funzioni in php:

  • header()
  • session_start()
  • setcookie()
  • setrawcookie()

vengono richiamate dopo che qualche dato è stato inviato al buffer di uscita. Cosi con l'aiuto di wireshark ho iniziato a sniffare pacchetti per capire quale fosse la sorgente di questi dati. Alla fine sono riuscito a scoprire che la causa di tutto era questa inclusione:



<?php virtual('/Connections/mysql.php'); ?>

Mi è bastato sostituire la precedente linea con:

<?php include (realpath(dirname(__FILE__).'/Connections/Connex.php')); ?>

e il problema si è risolto. Non ho ancora capito comunque se si tratti di un bug della mia versione di php o cosa.

Vi riporto per completezza possibili altre soluzioni al problema che comunque non mi avevano aiuto:

1. Spostate queste funzioni prima di ogni output. Per esempio in questo modo:

<?php
echo "hello world";
header (....);
?>


è errato! Portate header() prima dell'output ( nella prima riga se possibile ).

2. Verificate la codifica con la quale salvate i file perche puo capitare che usando UTF-8 (esempio) vengano aggiunti dei caratteri che non riuscite con un normale editor a vedere.

3. utilizzate la funzione ob_start(); prima della funzione header(). Per esempio in questo modo:

<?php
ob_start();
echo("hello world!");
session_start();
?>

Tuttavia sconsiglio quest'ultima soluzione poiche in questo modo aggirate solo il problema e vi rimane un codice strutturato male.

Sono ben accette altre soluzioni.

 

 

Come visitare i siti internet bloccati a lavoro, scuola ecc

Stampa
PDF



Quanti ti voi hanno restrizioni sui siti internet a lavoro o a scuola? Oggi vedremo due piccolissimi trucchi per non avere piu limitazioni.

PRIMA ALTERNATIVA ( raccomandato ): Utilizzare il servizio gratuito di blockedsiteaccess.com


Ci basterà andare su qui e immetere l'indirizzo del sito internet che volete visitare in questo campo:

(si trova piu o meno al centro della pagina tra le varie pubblicita )

In questo modo utilizzerete i proxy del loro sito per aggirare la restrizione.


SECONDA ALTERNATIVA: Utilizzare il servizio di traduzione di google

Per chi non ha problemi con l'inglese, basta andare qui, inserire in "Traduci la pagina Web" l'url del sito, settare correttamente le lingue di traduzione (da italiano a inglese) e premere su "Traduci"

Ovviamente il sito in questo caso è in inglese, tuttavia potete poi ritradurre da inglese a italiano ma i risultati non saranno perfetti.

 

Ovviamente questi due "trucchi" funzionano solo se le restrizioni sui vostri proxy sono di tipo "Black list" e non "White List"

 

Upload di file con inserimento del nome del file in un database mysql

Stampa
PDF

 

Realizziamo oggi un piccolo script in php che effettua l'upload di un file su server e successivamente scriva in un database MYSQL il nome del file appena uppato.

Prerequisiti:
PHP 4.x o sup.
MYSQL

Supponiamo per semplicita di lavorare in una directory chiamata "upload".

La prima pagina che realizziamo è quella contenente il form che chiamiamo "select.php".

File: upload/select.php

Show/Hidden code

 
<form enctype="multipart/form-data" action="upload.php" method="post" name="upload_file">
<input type="hidden" name="MAX_FILE_SIZE" value="5000000">
<input name="userfile" type="file">
<input type="submit" value="upload" name="file_uploaded">
</form>
 

A questo punto come potete vedere nell'action del form abbiamo bisogno di creare il file "upload.php". Ho commentato abbastanza il codice affinche non necessiti di ulteriori spiegazioni.

File: upload/upload.php

Show/Hidden code

 
<?php
// uploadfile www.ciotoli.it
 
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{
//upload
$file_realname = $_FILES['userfile']['name'];
 
//Copio il file nella directory
copy($_FILES['userfile']['tmp_name'], "media/$file_realname");
 
//Collegamento al db per scrittura risultato
mysql_connect("localhost","username","password");
mysql_select_db("dbname");
$inserisci = mysql_query("INSERT INTO foto(nomefile) VALUES('$file_realname')");
 
//Controllo se l'inserimento è andato a buon fine
    if(!$inserisci) {
        echo "Il file è stato inviato ma non è stato possibile scrivere sul database";
    } 
    else {
        echo "Scrittura su db eseguita correttamente";
    }  
 
}
else
    {
        echo "Errore nell'upload.<BR>File non disponibile o troppo grande";
    }
?>
 


Ricordo che è necessario editare le seguenti righe:

mysql_connect("localhost","username","password");
mysql_select_db("dbname");

e creare nel database una tabella chiamata filename con:

Un campo di tipo INT chiamato Id e con l'opzione AUTOINCREMENT e PRIMARY
Un campo di tipo TEXT chiamato filename

Questo script effettua l'upload in una directory "upload/media" che dovete quindi creare e assegnarle 777 come permessi.

La struttura finale della directory upload sarà la seguente:

upload/index.php
upload/upload.php
upload/media/

 

 

 

Impossibile aprire pendrive?

Stampa
PDF

 

Nella maggior parte dei casi la causa è un file chiamato autorun.inf che viene creato da qualche virus nella root della vostra pendrive. Questo impedisce di aprire la vostra pendrive facendo doppio clic su di essa e siete ogni volta costretti ad usare "tasto destro" -> "esplora".
Per verificare che si tratti proprio del file autorun.inf è sufficiente aprire il promp dei comandi e digitare:

1. Lettera dell'unità della vostra pendrive seguita da ":" (Ad esempio G: ). Premere "invio".

2. dir /w /a  Premere Invio

e controllare se nella lista dei file è presente il file chiamato autorun.inf

Per risolvere il problema è sufficiente rimuovere autorun.inf ( ed eventualmente altri file sospetti con estensione .exe )

Se non siete in grado di rimuoverlo manualmente potete ricorrere ad un piccolo software che lo fa per voi:



Autorun Eater. Potete scaricare da QUI il software.

Appena installato e avviato, Autorun Eater rileverà automaticamente pendrive "difettose" e vi chiederà di eliminare il file.