Warning: Cannot modify header information - headers already sent by

Discussion in 'PHP' started by Cancer78, Nov 15, 2009.

  1. #1
    Im doing my first php site and is keep getting this error message

    Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/vhosts/itprofile.co.za/subdomains/fantasyhouse/httpdocs/test.php:9) in /home/httpd/vhosts/itprofile.co.za/subdomains/fantasyhouse/httpdocs/test.php on line 188

    Here is the php code I am using

    <?php
    define('DESTINATION_FOLDER','uploads/');
    // Maximum allowed file size, Kb
    // Set to zero to allow any size
    define('MAX_FILE_SIZE', 0);
    // Upload success URL. User will be redirected to this page after upload.
    define('SUCCESS_URL','confirmation.php');
    // Allowed file extensions. Will only allow these extensions if not empty.
    // Example: $exts = array('avi','mov','doc');
    $exts = array();
    // rename file after upload? false - leave original, true - rename to some unique filename
    define('RENAME_FILE', false);
    // put a string to append to the uploaded file name (after extension);
    // this will reduce the risk of being hacked by uploading potentially unsafe files;
    // sample strings: aaa, my, etc.
    define('APPEND_STRING', '');
    // Need uploads log? Logs would be saved in the MySql database.
    define('DO_LOG', true);
    // MySql data (in case you want to save uploads log)
    define('DB_HOST','localhost'); // host, usually localhost
    define('DB_DATABASE','fantasyhouse'); // database name
    define('DB_USERNAME','surina'); // username
    define('DB_PASSWORD','Cancer'); // password
    /* NOTE: when using log, you have to create mysql table first for this script.
    Copy paste following into your mysql admin tool (like PhpMyAdmin) to create table
    If you are on cPanel, then prefix _uploads_log on line 205 with your username, so it would be like myusername_uploads_log

    CREATE TABLE _uploads_log (
    log_id int(11) unsigned NOT NULL auto_increment,
    log_filename varchar(128) default '',
    log_size int(10) default 0,
    log_ip varchar(24) default '',
    log_date timestamp,
    PRIMARY KEY (log_id),
    KEY (log_filename)
    );
    */
    ####################################################################
    ### END OF SETTINGS. DO NOT CHANGE BELOW
    ####################################################################
    // Allow script to work long enough to upload big files (in seconds, 2 days by default)
    @set_time_limit(172800);
    // following may need to be uncommented in case of problems
    // ini_set("session.gc_maxlifetime","10800");
    function showUploadForm($message='') {
    $max_file_size_tag = '';
    if (MAX_FILE_SIZE > 0) {
    // convert to bytes
    $max_file_size_tag = "<input name='MAX_FILE_SIZE' value='".(MAX_FILE_SIZE*1024)."' type='hidden' >\n";
    }
    // Load form template
    include ('file-upload.html');
    }
    // errors list
    $errors = array();
    $message = '';
    // we should not exceed php.ini max file size
    $ini_maxsize = ini_get('upload_max_filesize');
    if (!is_numeric($ini_maxsize)) {
    if (strpos($ini_maxsize, 'M') !== false)
    $ini_maxsize = intval($ini_maxsize)*1024*1024;
    elseif (strpos($ini_maxsize, 'K') !== false)
    $ini_maxsize = intval($ini_maxsize)*1024;
    elseif (strpos($ini_maxsize, 'G') !== false)
    $ini_maxsize = intval($ini_maxsize)*1024*1024*1024;
    }
    if ($ini_maxsize < MAX_FILE_SIZE*1024) {
    $errors[] = "Alert! Maximum upload file size in php.ini (upload_max_filesize) is less than script's MAX_FILE_SIZE";
    }
    // show upload form
    if (!isset($_POST['submit'])) {
    showUploadForm(join('',$errors));
    }
    // process file upload
    else {

    while(true) {
    // make sure destination folder exists
    if (!@file_exists(DESTINATION_FOLDER)) {
    $errors[] = "Destination folder does not exist or no permissions to see it.";
    break;
    }
    // check for upload errors
    $error_code = $_FILES['filename']['error'];
    if ($error_code != UPLOAD_ERR_OK) {
    switch($error_code) {
    case UPLOAD_ERR_INI_SIZE:
    // uploaded file exceeds the upload_max_filesize directive in php.ini
    $errors[] = "File is too big (1).";
    break;
    case UPLOAD_ERR_FORM_SIZE:
    // uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form
    $errors[] = "File is too big (2).";
    break;
    case UPLOAD_ERR_PARTIAL:
    // uploaded file was only partially uploaded.
    $errors[] = "Could not upload file (1).";
    break;
    case UPLOAD_ERR_NO_FILE:
    // No file was uploaded
    $errors[] = "Could not upload file (2).";
    break;
    case UPLOAD_ERR_NO_TMP_DIR:
    // Missing a temporary folder
    $errors[] = "Could not upload file (3).";
    break;
    case UPLOAD_ERR_CANT_WRITE:
    // Failed to write file to disk
    $errors[] = "Could not upload file (4).";
    break;
    case 8:
    // File upload stopped by extension
    $errors[] = "Could not upload file (5).";
    break;
    } // switch
    // leave the while loop
    break;
    }
    // get file name (not including path)
    $filename = @basename($_FILES['filename']['name']);
    // filename of temp uploaded file
    $tmp_filename = $_FILES['filename']['tmp_name'];
    $file_ext = @strtolower(@strrchr($filename,"."));
    if (@strpos($file_ext,'.') === false) { // no dot? strange
    $errors[] = "Suspicious file name or could not determine file extension.";
    break;
    }
    $file_ext = @substr($file_ext, 1); // remove dot

    // check file type if needed
    if (count($exts)) { /// some day maybe check also $_FILES['user_file']['type']
    if (!@in_array($file_ext, $exts)) {
    $errors[] = "Files of this type are not allowed for upload.";
    break;
    }
    }
    // destination filename, rename if set to
    $dest_filename = $filename;
    if (RENAME_FILE) {
    $dest_filename = md5(uniqid(rand(), true)) . '.' . $file_ext;
    }
    // append predefined string for safety
    $dest_filename = $dest_filename . APPEND_STRING;
    // get size
    $filesize = intval($_FILES["filename"]["size"]); // filesize($tmp_filename);
    // make sure file size is ok
    if (MAX_FILE_SIZE > 0 && MAX_FILE_SIZE*1024 < $filesize) {
    $errors[] = "File is too big (3).";
    break;
    }
    if (!@move_uploaded_file($tmp_filename , DESTINATION_FOLDER . $dest_filename)) {
    $errors[] = "Could not upload file (6).";
    break;
    }
    if (DO_LOG) {
    // Establish DB connection
    $link = @mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD);
    if (!$link) {
    $errors[] = "Could not connect to mysql.";
    break;
    }
    $res = @mysql_select_db(DB_DATABASE, $link);
    if (!$res) {
    $errors[] = "Could not select database.";
    break;
    }
    $m_ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
    $m_size = $filesize;
    $m_fname = mysql_real_escape_string($dest_filename);
    $sql = "insert into _uploads_log (log_filename,log_size,log_ip) values ('$m_fname','$m_size','$m_ip')";
    $res = @mysql_query($sql);
    if (!$res) {
    $errors[] = "Could not run query.";
    break;
    }
    @mysql_free_result($res);
    @mysql_close($link);
    } // if (DO_LOG)
    // redirect to upload success url
    header('Location: ' . 'SUCCESS_URL'); //this being line 188
    die();
    break;
    } // while(true)

    // Errors. Show upload form.
    $message = join('',$errors);
    showUploadForm($message);

    }

    ?>

    Please help me
     
    Cancer78, Nov 15, 2009 IP
  2. ads2help

    ads2help Peon

    Messages:
    2,142
    Likes Received:
    67
    Best Answers:
    1
    Trophy Points:
    0
    #2
    There is output before the header() at line 188 so it causes the error. Maybe the problem (output) is from file-upload.html

    Anyway, a simple fix would be : add ob_start(); after line 1.

    <?php
    ob_start();
    PHP:
     
    ads2help, Nov 15, 2009 IP
  3. Cancer78

    Cancer78 Peon

    Messages:
    4
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #3
    I have done as you sail, and it sorted that problem out, but now it gives me this error
    Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/vhosts/itprofile.co.za/subdomains/fantasyhouse/httpdocs/test.php:9) in /home/httpd/vhosts/itprofile.co.za/subdomains/fantasyhouse/httpdocs/test.php on line 189

    taking that I added a line it still comes back to the original line 188.
     
    Cancer78, Nov 15, 2009 IP
  4. b.krishna

    b.krishna Well-Known Member

    Messages:
    39
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    106
    #4
    The header statement should not be used after any statement the produce output. Such statements are echo, print_r. This error also comes when you leave space after opening or closing php tags<?php ?> So check that also.
     
    b.krishna, Nov 16, 2009 IP
  5. Cancer78

    Cancer78 Peon

    Messages:
    4
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #5
    Might sound strange, but i had a dream about it last night, got up this morning and fixed it. Thanks for the help though, sure I'll be back for more
     
    Cancer78, Nov 16, 2009 IP