严格的标准:只应传递变量

时间:2014-04-19 05:40:02

标签: php mysql

我有图片上传脚本,显示了这一点(严格的标准:只有变量应该通过引用传递到第33行的C:\ wamp \ www \ Fcomail-Final \ cpanel \ fcomail \ Gallery.php 调用堆栈)错误第33行是

require('../conn/include.php');
require('quick.php');
$query="SELECT * FROM category";
$result=mysql_query($query);
$project=$_POST['project'];
$alttext=$_POST['alttext'];
$relation=$_POST['Section'];;

if(isset($_FILES['image'])) {
    $errors=array();
    $allowed_ext=array('jpg','png','jpeg','JPG');
    $filename=$_FILES['image']['name'];
    $name=stripslashes($filename);
    **Line 33** $type=strtolower(end(explode('.',$filename)));
    $size=$_FILES['image']['size'];
    $file_tmp=$_FILES['image']['tmp_name'];
if(in_array($type,$allowed_ext) ===false) {
    $errors[]= "<span class=\"notification n-error\">Extenstion Not Allowed</span>";
}if($size > 1048576) {
    $errors[]= "<span class=\"notification n-error\">File must be less then 2mb</span>";
}if(file_exists('../../images/fcomail/gallery/'.$filename)) {
   $errors[]= "<span class=\"notification n-error\">File $filname Already Exists in directory</span>";
}if(empty($errors)) {
    if(move_uploaded_file($file_tmp, '../../images/fcomail/gallery/'.$filename)) {
        $insert="Insert into `my`.gallery(name,alttext,project,relation)VALUES('$name','$alttext','$project','$relation')";
        //echo $insert;
        $que=mysql_query($insert);
    echo "<span class=\"notification n-success\">File $filname Uploaded Sucessfully</span>";
    }
}else {
    foreach($errors as $error) {
        echo $error,'<br/>';    
    }
}
}

1 个答案:

答案 0 :(得分:2)

您需要打破以下行

$type=strtolower(end(explode('.',$filename)));

$fname = explode('.',$filename);
$filename = end($fname);
$type=strtolower($filename);

原因:

来自PHP手册中end()的文档。

  

阵列。此数组通过引用传递,因为它被修改   功能。这意味着你必须传递一个真正的变量,而不是一个   函数返回一个数组,因为只有实际的变量   通过引用传递。