2

我已经在网上查看了这个错误,它主要是说你缺少一个分号,但我找不到任何缺少的分号我希望你们能帮助我。

<?php // add_file.php
require 'log.php';
require 'dictionary.php';
function add_file($file = $_FILES["file"], $tags = $_POST["tags"] ){ // Parse error: syntax error, unexpected T_VARIABLE
    $tags = explode(",", $tags);
    if ($file["error"]>0){
        log("add_file", "Error in file: ".$file["error"], "error");
        exit();
    } else {
        $file["deleted"] = false;
        $file["tags"] = $tags;
        $file["id"] = uniqid();
        $file["ext"] = pathinfo($file['name'], PATHINFO_EXTENSION);
        $file["name"] = pathinfo($file['name'], PATHINFO_FILENAME);
        $file["tags"][] = $file["ext"];
        $file["tags"][] = $file["type"];
        $file["tags"][] = explode("/", $file["type"])[0];
        $file["date_created"] = date(DateTime::ATOM);
        if (file_exists("files/" . $file["id"].".".$file['ext'])){
            $file["id"] = uniqid();
            $file["loc"] = "files/" . $file["id"].".".$file['ext'];
            move_uploaded_file($file["tmp_name"], $file["loc"]);
            log("add_file", "Added file at: ".$file["loc"]);
        } else {
            $file["loc"] = "files/" . $file["id"].".".$file['ext'];
            move_uploaded_file($file["tmp_name"], $file["loc"]);
            log("add_file", "Added file at: ".$file["loc"]);
        }
        dict_add("dictionary.json", $file);
    }
}

?>
4

8 回答 8

3

函数的可选参数必须是常量表达式:

默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。

http://php.net/manual/en/functions.arguments.php#functions.arguments.default

于 2012-12-21T16:40:31.947 回答
2

您不能在函数定义中分配“动态”默认值:

$x = 7;
function foo($y = $x) { } // wrong
function foo($y = 7) { } // ok
于 2012-12-21T16:40:23.287 回答
1

我认为您不能将变量分配给函数参数

请参阅: http: //php.net/manual/en/functions.arguments.php

于 2012-12-21T16:39:50.713 回答
1

你不能这样做

function add_file($file = $_FILES["file"], $tags = $_POST["tags"] )

改为这样做

function add_file ($file = null, $tags = null) {
    if (is_null($file)) $file = $_FILES["file"];
    if (is_null($tags)) $tags = $_POST["tags"]
    // ...
}

理想情况下,您只需在调用函数时将它们传递进去

add_file($_FILES['file'], $_POST['tags']);
于 2012-12-21T16:41:43.957 回答
1

每个PHP 文档

默认值必须是常量表达式,而不是(例如)变量、类成员或函数调用。

学术上的原因是函数定义在变量甚至可能存在或特别有机会改变之前就已注册。

于 2012-12-21T16:42:34.707 回答
0
$tags = $_POST["tags"] 

是问题。默认值只能定义为常量值,而不是引用另一个变量(甚至是超全局变量)......虽然 array() 是一个可接受的异常

于 2012-12-21T16:41:26.373 回答
0

这不是在 PHP 中将参数传递给函数的方式。它应该看起来像这样 -

function add_file($file, $tags){ 
  // 
}
add_file($_FILES["file"], $_POST["tags"]);

您在函数中给出的名称是您在函数中引用变量的方式,以及在调用该函数时传递实际值($_FILEand中的内容$_POST)的方式。

您的语法有点像您正在尝试为这些参数设置默认值。在这种情况下,您必须提供实际值而不是变量。例如 -

function talk($words="Hello World"){
  echo $words;
}

您现在可以将可选值传递给talk()函数。无论你通过什么,它都会回响同样的东西。但是,如果您什么都不传递 - 默认的“Hello World”将被回显。

talk("Winter Bash!"); // Output - Winter Bash!
talk(); // Output - Hello World
于 2012-12-21T16:41:30.853 回答
0

您不能将变量用作函数参数的默认值。您必须使用常量表达式(即不需要计算的表达式)作为默认值。

于 2012-12-21T16:43:10.610 回答