1

I don't really know much PHP. But anyways I am not able to upload a .csv file using the following php. I have fixed the problem with upload_max size related attributes. Works fine on my local but not on sandbox. Is it file type problem?

I can only get it to print something like this... which is not helpful at all. "-- CSV file to load: >>> NOT a file valid: 1 "

where should I fix? How do I print a complete PHP error message instead of just the value "1" which I'm not sure what it corresponds to? ie... output more useful print like this "UPLOAD_ERR_INI_SIZE: 1"?

<?php
// using upload at click from http://code.google.com/p/upload-at-click/
// FileData is the name for the input file

$file_result = "";
$file = $_FILES['Filedata'];

$allowedExtensions = array("csv", "txt");
$arrayVar = explode(".", $file["name"]);
$extension = end($arrayVar);

//commented out for “Only variables should be passed by reference” error
//$extension = end(explode(".", $file["name"]));


function isAllowedExtension($fileName) {
    global $allowedExtensions;
    return in_array(end(explode(".", $fileName)), $allowedExtensions);
}

if($file["error"] > 0){
    echo "failure to upload the file >>> ". "Error code: ".$file["error"]."<br>";
}else{
    //echo " >>> CURRENT DIR: ".getcwd() . "\n";
    $workDir = getcwd();

    $dir = substr($workDir, 0, -10);
    $path = $file["name"];
    $newFileLoc = $dir.$path;

    $file_result.=
    "<br>     Upload: " . $file["name"] . "<br>" .
    "     Type: " . $file["type"] . "<br>" .
    "     Size: " . $file["size"] . "<br>" .
    "     file uploaded to: ".$newFileLoc."<br>";

    // txt - text/plain
    // rtf - application/msword
    // dat/obj - application/octet-stream
    // csv - application/vnd.ms-excel
    // maximum 200 MB file - 200,000,000 k

    if (    ($file["type"] == "application/vnd.ms-excel" || $file["type"] == "text/plain")
            && isAllowedExtension($file["name"])
            && ($file["size"] < 200000000)
        )
        {   
            move_uploaded_file($file["tmp_name"], $newFileLoc);
            //echo $file_result.=" >>> File uploaded successfull!!";
            echo "|".$path;//"filePath : " . $newFileLoc;

        }else{
            echo " >>> NOT a file valid: ". isAllowedExtension($file["name"]);
        }       
}
?>

This is the line that was added as suggested by another user to catch the error correctly. Please let me know if that's right sorry i don't know much PHP at all. Anyways, the error printed is just "-- CSV file to load: >>> NOT a file valid: 1 "

<?php
// using upload at click from http://code.google.com/p/upload-at-click/
// FileData is the name for the input file

ini_set('display_errors', 1); error_reporting(E_ALL);

$file_result = "";
$file = $_FILES['Filedata'];

$allowedExtensions = array("csv", "txt");
$arrayVar = explode(".", $file["name"]);
$extension = end($arrayVar);

1 Answer 1

1

The block in question is the following:

if( ( $file["type"] == "application/vnd.ms-excel" || $file["type"] == "text/plain" ) && 
    isAllowedExtension($file["name"]) && 
    ( $file["size"] < 200000000 ) )
{   
    move_uploaded_file($file["tmp_name"], $newFileLoc);

    //echo $file_result.=" >>> File uploaded successfull!!";

    echo "|".$path;//"filePath : " . $newFileLoc;
}
else
{
    echo " >>> NOT a file valid: ". isAllowedExtension($file["name"]);
}

Note that you're hitting your else echo, and the '1' is because isAllowedExtension() is returning a boolean, which is true, which is denoted as '1' (as opposed to '0') when you print it.

One of your conditions in the if there are failing. I'd separate them out a bit, and see which in particular is.

EDIT For example:

if( ( $file["type"] == "application/vnd.ms-excel" || $file["type"] == "text/plain" ) )
{
    if( isAllowedExtension($file["name"]) )
    {
        if( $file["size"] < 200000000 )
        {
            move_uploaded_file($file["tmp_name"], $newFileLoc);

            echo "|".$path;//"filePath : " . $newFileLoc;
        }
        else
        {
            echo "Invalid file size: " . $file["size"] . "\n";   
        }
    }
    else
    {
        echo "Invalid extension: " . $file["name"] . "\n";   
    }    
}
else
{
    echo "Invalid type: " . $file["type"] . "\n";
}

Alternatively, you can just print_r() $file and see what it's values are.

Sign up to request clarification or add additional context in comments.

1 Comment

nice, thanks alot for the update. I updated the php according to your suggestion. It's much more clear this way. But now getting a new error "-- CSV file to load: Invalid type: application/octet-stream"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.