$记录未传递该值

问题描述 投票:0回答:1

自从迁移到PHP7.1以来,“$ record”不再写入db。

它仍在向索引添加+1记录,但它不会将实际信息写入文件namefile.dat。

namefile.dat权限设置为644,但文件仍然返回空,没有数据。

if (!$db->open("../namefile"))    {
    $schema = array(
        array("key", FFDB_INT, "key"),
        array("nname", FFDB_STRING),
        array("desc", FFDB_STRING),
        array("daya", FFDB_INT),
        array("yeara", FFDB_INT)
        );
    // Try and create it...
    if (!$db->create("namefile", $schema))       {
        echo "Error creating database\n";
        return;
    }
}
$record["key"] = $data;
$record["nname"] = ucwords($datana);
$record["desc"] = $desc;
list($record["daya"]) = sscanf($daya, "%d"); // string -> int
list($record["yeara"]) = sscanf($yeara, "%d"); // string -> int

有任何想法吗?因为我尝试更改为$ _POST强制它....

   $record["key"] = $_POST[$data];
   $record["nname"] = ucwords($_POST["$datana"]);
   $record["desc"] = $_POST["$desc"];
   list($record["daya"]) = sscanf($_POST["$daya", "%d"]);
   list($record["yeara"]) = sscanf($_POST["$yeara", "%d"]);

....但仍未能将值写入文件。

有什么建议?

谢谢

编辑

错误日志指向这两个函数 -

 function read_byte($fp)     {
    return $this->bin2dec(fread($fp, 1), 1);
 }


function read_str($fp)     {
    $strlen = $this->bin2dec(fread($fp, 4), 4);
    return fread($fp, $strlen);
 }

注意:bin2dec就像bindec一样工作,没有错误

php return-value upgrade deprecated
1个回答
0
投票

bin2dec方法定义为:

function bin2dec(&$str, $len)

因此,第一个参数被声明为引用变量。这意味着当您调用它时,相应的参数必须是可以更新的变量。但它被称为这样:

  return $this->bin2dec(fread($fp, 4), 4);

当函数参数是引用变量时,不能使用函数调用作为参数,因为它没有可供引用的变量。

实际上没有理由为什么bin2dec()的第一个参数需要作为参考,因为函数永远不会修改它。将函数定义更改为:

function bin2dec($str, $len)

FFDB似乎有很多不必要的引用变量和函数参数。它是相当古老的代码(超过16年),也许在早期版本的PHP中,这对于防止不必要的复制很有用。 PHP多年来一直使用copy-on-write,因此不再需要为此目的使用引用。

我编辑了ffdb.inc.php并用&$替换了所有$,除了:

function add(&$record)

这似乎需要FFDB_INT_AUTOINC列,在存储时在$record中进行了修改。

这样做后,我没有得到任何Only variables should be passed by reference错误。

© www.soinside.com 2019 - 2024. All rights reserved.