【问题标题】:Error "Strict standards: Only variables should be passed by reference" [duplicate]错误“严格标准:只能通过引用传递变量”[重复]
【发布时间】:2015-02-02 20:50:08
【问题描述】:

我正在 PHP 中创建一个上传函数,但是当我尝试上传时收到此消息:

严格的标准:在第 72 行中只能通过引用传递变量

我不确定我做错了什么。我该如何解决?

线条看起来像:

    if(isset($_FILES['image'])){
        $errors= array();
        $file_name = $_FILES['image']['name'];
        $file_size = $_FILES['image']['size'];
        $file_tmp  = $_FILES['image']['tmp_name'];
        $file_type = $_FILES['image']['type'];
        $file_ext = strtolower(end(explode('.', $_FILES['image']['name']))); // LINE 72
        $extensions = array("jpeg", "jpg", "png");
        if(in_array($file_ext, $extensions)=== false){
         echo "Filtypen skal være JPEG, JPG eller PNG.";
        } 
        else {
            move_uploaded_file($file_tmp, "../img/portfolio/".$file_name);
        }

【问题讨论】:

  • 改用$foo = end(...); $ext = strtolower($foo)
  • 有趣的是,当创建一个没有特定顺序的数字键数组时,end() 仍然只会返回最后一个创建的值。所以,如果你有这样的东西: 这将打印“0”。试试这个 $str = explode('.',$_FILES['image']['name']); $str = 结束($str); $file_ext=strtolower($str);

标签: php upload pass-by-reference strict


【解决方案1】:

您收到此错误的原因是 end 函数。如果您仔细查看 PHP 文档,您会发现 end 采用与符号隐含的引用。 PHP 只能引用变量,不能引用动态值。

要克服这个问题,您必须执行以下操作:

 $exploded = explode('.', $_FILES['image']['name']);
 $last_element = end($exploded);
 $file_ext=strtolower($last_element);

或者更短一点

 $exploded = explode('.', $_FILES['image']['name']);
 $file_ext = strtolower(end($exploded));

让我在这里进一步解释一下:

虽然end函数的返回值是数组的最后一个元素,但它在内部设置了指向数组末尾的指针。如果您现在调用$elem = current($exploded),您也会检索到最后一个元素。

【讨论】:

  • 请考虑将此作为一个自己的问题来定义问题是什么,您要达到什么目标以及您已经尝试过什么。这样可以保持 StackOverflow 的结构干净。
  • 好主意,我会这样做的:)
猜你喜欢
  • 2012-04-08
  • 2012-10-25
  • 2017-07-08
  • 2017-07-24
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
相关资源
最近更新 更多