I am new to php.I was trying to upload a file but i got an HTML table as result with undefined content type.Here is my code

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="fileuploader.css" rel="stylesheet" type="text/css">

<script src="fileuploader.js" type="text/javascript"></script>
<script>
function createUploader(){
// alert("hhh");
var uploader = new qq.FileUploader({
element: document.getElementById('file-uploader-demo1'),

           action: 'php.php',               

//action: 'addinvoice.php',
debug: true
});

    }

    // in your app create uploader as soon as the DOM is ready
    // don't wait for the window to load  
       window.onload = createUploader;  
</script>    
</head>
<body>
    <form action="php.php"   method="POST" enctype="multipart/form-data"/>            
            <table border="0" align="center">
            <tr >
            <td>   

<div id="file-uploader-demo1">       
    <noscript>           
        <p>Please enable JavaScript to use file uploader.</p>
        <!-- or put a simple form for upload here -->

    </noscript>         
</div>
            </td>
            </tr>


                  <tr>
                    <td></td>
                    <td align="left"><input type="submit" name="submit"  value="submit"></td>
                </tr>
            </table>                  
        </form>

</body>

</html>

here is my php.php code
<?php
/**
* Handle file uploads via XMLHttpRequest
*/

class qqUploadedFileXhr {
/**
* Save the file to the specified path
* @return boolean TRUE on success
*/
function save($path) {
$input = fopen("php://input", "r");
$temp = tmpfile();
$realSize = stream_copy_to_stream($input, $temp);
fclose($input);

// if ($realSize != $this->getSize()){
// return false;
// }

    $target = fopen($path, "w");
    fseek($temp, 0, SEEK_SET);
    stream_copy_to_stream($temp, $target);
    fclose($target);

    return true;
}
function getName() {
    return $_GET['qqfile'];
}
function getSize() {

    if (isset($_SERVER["CONTENT_LENGTH"])){
      return (int)$_SERVER["CONTENT_LENGTH"];


    } 
    else {
        throw new Exception('Getting content length is not supported.');
    }
}

}

//print_r($_SERVER) ;
//print_r($_POST) ;
//exit();
/**
* Handle file uploads via regular form post (uses the $_FILES array)
*/
class qqUploadedFileForm {
/**
* Save the file to the specified path
* @return boolean TRUE on success
*/
function save($path) {
if(!move_uploaded_file($_FILES['qqfile']['tmp_name'], $path)){
return false;
}
return true;
}
function getName() {
return $_FILES['qqfile']['name'];
}
function getSize() {
return $_FILES['qqfile']['size'];
}
}

class qqFileUploader {
private $allowedExtensions = array();
private $sizeLimit = 10485760;
private $file;

function __construct(array $allowedExtensions = array("jpeg", "xml", "bmp","php","sql","txt"), $sizeLimit = 10485760){
    $allowedExtensions = array_map("strtolower", $allowedExtensions);

    $this->allowedExtensions = $allowedExtensions;
    $this->sizeLimit = $sizeLimit;

    $this->checkServerSettings();

    if (isset($_GET['qqfile'])) {
        $this->file = new qqUploadedFileXhr();
    } elseif (isset($_FILES['qqfile'])) {
        $this->file = new qqUploadedFileForm();
    } else {
        $this->file = false;
    }
}

private function checkServerSettings(){
    $postSize = $this->toBytes(ini_get('post_max_size'));
    $uploadSize = $this->toBytes(ini_get('upload_max_filesize'));

    if ($postSize < $this->sizeLimit || $uploadSize < $this->sizeLimit){
        $size = max(1, $this->sizeLimit / 1024 / 1024) . 'M';
        die("{'error':'increase post_max_size and upload_max_filesize to $size'}");
    }
}

private function toBytes($str){
    $val = trim($str);
    $last = strtolower($str[strlen($str)-1]);
    switch($last) {
        case 'g': $val *= 1024;
        case 'm': $val *= 1024;
        case 'k': $val *= 1024;
    }
    return $val;
}

/**

* Returns array('success'=>true) or array('error'=>'error message')
*/
function handleUpload($uploadDirectory, $replaceOldFile = FALSE){
if (!is_writable($uploadDirectory)){
return array('error' => "Server error. Upload directory isn't writable.");
}

    if (!$this->file){
        return array('error' => 'No files were uploaded.');
    }
    //$fileclass = new qqUploadedFileXhr();
    //$fsize=$fileclass->getSize();
    //$size = $this->file->$fsize;
   $size = $this->file->getSize();



    if ($size == 0) {
       return array('error' => 'File is empty');
    }

    if ($size > $this->sizeLimit) {
        return array('error' => 'File is too large');
    }
   $pathinfo = pathinfo($this->file->getName());
    //$pathinfo = pathinfo($this->file->$fileclass->getName());        

    $filename = $pathinfo['filename'];

    //$filename = md5(uniqid());

    $ext = $pathinfo['extension'];

    if($this->allowedExtensions && !in_array(strtolower($ext), $this->allowedExtensions)){
        $these = implode(', ', $this->allowedExtensions);
        return array('error' => 'File has an invalid extension, it should be one of '. $these . '.');
    }

    if(!$replaceOldFile){
        /// don't overwrite previous files that were uploaded
        while (file_exists($uploadDirectory . $filename . '.' . $ext)) {
            $filename .= rand(10, 99);
        }
    }

    if ($this->file->save($uploadDirectory . $filename . '.' . $ext)){
    //if ($this->file->$fileclass->save($uploadDirectory . $filename . '.' . $ext)){
        return array('success'=>true);
    } else {
        return array('error'=> 'Could not save uploaded file.' .
            'The upload was cancelled, or server error encountered');
    }

}

}
// list of valid extensions, ex. array("jpeg", "xml", "bmp","php","sql")
$allowedExtensions = array();
// max file size in bytes
$sizeLimit = 10 * 1024 * 1024;

$uploader = new qqFileUploader($allowedExtensions, $sizeLimit);
$result = $uploader->handleUpload('uploads/');
// to pass data through iframe you will need to encode all html tags
//echo htmlspecialchars(json_encode($result), ENT_NOQUOTES);

echo htmlspecialchars(json_encode($result), ENT_NOQUOTES);

if(empty($result)){

$result['success'] = $file->handleUpload('uploads/');

$result['error'] = $file->getError();

//if we failed, get the error message

if(!$result['success']){

$result['error'] = $file->getError();

}
}
?>

Any help would be appreciated.I changed my php.ini and make upload_max_filesize = 60M
post_max_size = 60M.I also checked for($_post) for content length.It doesnt work.I also printed print_r($_server).But the content length is not printed as the output.

Recommended Answers

All 15 Replies

please anyone help me in solving my problem

Do you get an error anywhere ? Where does your upload javascript code come from ?

My error is an alert message saying file is empty.Error is as shown
[uploader] xhr - server response received
fileuploader.js (line 874)
[uploader] responseText = {"error":"File is empty"}

sorry the above error occurs when i comment else part of getSize().I am actually getting the result as an HTML table.The error is as below:
[uploader] xhr - server response received
[uploader] responseText = <br /> <font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'> <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Fatal error: Uncaught exception 'Exception' with message 'Getting content length is not supported.' in D:\Wamp\www\sam\php.php on line <i>38</i></th></tr> <tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Exception: Getting content length is not supported. in D:\Wamp\www\sam\php.php on line <i>38</i></th></tr> <tr><th align='left' bgcolor='#e9b96e' colspan='5'>Call Stack</th></tr> <tr><th align='center' bgcolor='#eeeeec'>#</th><th align='left' bgcolor='#eeeeec'>Time</th><th align='left' bgcolor='#eeeeec'>Memory</th><th align='left' bgcolor='#eeeeec'>Function</th><th align='left' bgcolor='#eeeeec'>Location</th></tr> <tr><td bgcolor='#eeeeec' align='center'>1</td><td bgcolor='#eeeeec' align='center'>0.0012</td><td bgcolor='#eeeeec' align='right'>416344</td><td bgcolor='#eeeeec'>{main}( )</td><td title='D:\Wamp\www\sam\php.php' bgcolor='#eeeeec'>..\php.php<b>:</b>0</td></tr> <tr><td bgcolor='#eeeeec' align='center'>2</td><td bgcolor='#eeeeec' align='center'>0.0014</td><td bgcolor='#eeeeec' align='right'>417416</td><td bgcolor='#eeeeec'>qqFileUploader->handleUpload( )</td><td title='D:\Wamp\www\sam\php.php' bgcolor='#eeeeec'>..\php.php<b>:</b>177</td></tr> <tr><td bgcolor='#eeeeec' align='center'>3</td><td bgcolor='#eeeeec' align='center'>0.0015</td><td bgcolor='#eeeeec' align='right'>417448</td><td bgcolor='#eeeeec'>qqUploadedFileXhr->getSize( )</td><td title='D:\Wamp\www\sam\php.php' bgcolor='#eeeeec'>..\php.php<b>:</b>127</td></tr> </table></font>

function getSize() {
if (isset($_SERVER["CONTENT_LENGTH"])){
return (int)$_SERVER["CONTENT_LENGTH"];
}
else {
throw new Exception('Getting content length is not supported.');
}
}

thats an error on this bit, check your php ini settings - sounds like that server variable isn't being set

You may want to just start with a simple upload script, heres a quick cut from my upload function

<?php 
if($_POST['trig'] == 'true'){
    //($_FILES["file"]["type"] == "text/plain" || $_FILES["file"]["type"] == "application/octet-stream")
    if ($_FILES["file"]["size"] < (1024*1024*20)){
        if ($_FILES["file"]["error"] > 0){
            $D['success'] = FALSE; 
            $D['msg'] = 'Return Code: '.$_FILES["file"]["error"];
        }else{
            $deletechars = array('"',"'",'\\');

            $D['msg'] = 'Return Code: '.$_FILES["file"]["error"];
            $D['data']['name'] = $_FILES["file"]["name"];
            $D['data']['type'] = $_FILES["file"]["type"];
            $D['data']['size'] = $_FILES["file"]["size"];
            foreach($D['data'] as $k=>$v){
                $D['data'][$k] = str_replace($deletechars,'',$v);
            }
            if (file_exists('C:/Inetpub/vhosts/example.co.uk/httpdocs/Uploads/'. $_FILES['file']['name'])){
                $D['success'] = FALSE;
                $D['msg'] = $folder.'/'.$_FILES['file']['name'].' already exists.'; 
            }else{
                if(move_uploaded_file($_FILES["file"]["tmp_name"],'C:/Inetpub/vhosts/example.co.uk/httpdocs/Uploads/'. $_FILES['file']['name'])){
                    $D['success'] = TRUE;
                    $D['msg'] = 'Stored in: Uploads/'.$folder.'/'. $_FILES['file']['name'];
                    //$TQ = "INSERT INTO `uploads` (`UID`,`folder`,`filename`,`size`,`type`) VALUES ('{$A['UID']}','{$folder}','{$D['data']['name']}','{$D['data']['size']}','{$D['data']['type']}')";
                    //if(mysql_query($TQ,$A['MH'])){
                    //  $D['msg'] .= '<br>Inserted into Database';
                    //}else{
                    //  $D['msg'] .= '<br>Failed to insert into Database';
                    //}
                }else{
                    $D['success'] = FALSE;
                    $D['msg'] = 'Failed to move file'.$_FILES['file']['tmp_name'];
                }
            }
        }
    }else{
        $D['msg'] = 'File too big: '.($_FILES['file']['size']/1024).' Kb';
        $D['success'] = FALSE;
    }
}else{
    $D['success'] = FALSE;
    $D['msg'] = '';
}
var_dump($D);
?>
<form method="post" enctype="multipart/form-data">
<input type="hidden" name="trig" value="true">
<label for="file">File:</label>
<input type="file" name="file" id="file" /> <br />
<input type="submit" name="submit" value="Submit" />
</form>

you just need to change the local address "C:/Inetpub/vhosts/example.co.uk/httpdocs/Uploads/" to the folder you want the upload in and that file should work as is

It doesn't work.Can u help me in correcting my own code..

it sounds like your server setup not your code

check your php ini settings - sounds like that server variable isn't being set

It doesn't work.Can u help me in correcting my own code.content-length is not set in my php.ini.how can i set it

how can i set my content length in php.ini.

Type phpinfo(); into your php file and it will list out all config to do with php:

just a simple file with 1 line in it:

<?php
phpinfo();
?>

for me it shows the php.ini file about 8 rows down:

Loaded Configuration File D:\php\php.ini

and also much further down under PHP Variables it tells me:

_SERVER["CONTENT_LENGTH"] 0

I'm guessing yours will say no value, im not actually too sure how to set it in php.ini - i've never had to.

see if someone else with more experience on it can help on what to do, the code i posted doesn't rely on the server var to get the file size it looks like that code you got does

I checked what BIIM told but i couldn't find _SERVER["CONTENT_LENGTH"] under my php variables.Please help me in correcting my code.

Please help me in soving this program.

Do you mind if I ask you this.. who originally wrote the php.php was it Valums? or was it part of axiom ? Without retracing the original working codes, it will be pretty difficult for us to analyze and find the actual part of the script that is not working after your modifications. The way I see it , this script is intended to work as ajax uploader without a viewable form (it has, but it should be picking up the uploads inside a division .. I hope I am wrong.

If it was written by valum, then the upload button should be showing on the page onLoad, right below the division ->file_uploader_demo1, and this is the same division that will pick up the upload. I am not sure, but that's how the script is laid out..

Ya..php.php is copied from Valums.I need an upload form .So i copied it from valums.But i cannot do the uploading process.

Hello, sorry to up, but if this happen to someone else just change the form method to POST or check if debugmode is set to true, if so then set it to false or just delete it. $_SERVER['CONTENT_LENGHT'] seems to be only available in POST method...

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.