繁体   English   中英

php变量范围和fwrite里面的函数

[英]php variable scope and fwrite inside function

我试图找出我的添加到购物车过程的地方搞砸了,所以我决定添加一些日志代码(fwrite)然后我很快就了解了php变量范围。 而现在我被卡住了。

在我了解变量范围之前,我尝试过的第一件事。

$fp = fopen('logs/functions.txt', 'w');

function addtocart($pid,$qty){
    fwrite($fp, 'addtocart()\nProduct ID: '. $pid .'\nQuantity: '. $qty .'\n');
    if($pid<1 or $qty<1) return;
    if(is_array($_SESSION['cart'])){
        if(product_exists($pid)) return;
        $max=count($_SESSION['cart']);
        $_SESSION['cart'][$max]['productid']=$pid;
        $_SESSION['cart'][$max]['qty']=$qty;
    }else{
        $_SESSION['cart']=array();
        $_SESSION['cart'][0]['productid']=$pid;
        $_SESSION['cart'][0]['qty']=$qty;
    }
}

fclose($fp);

所以返回了一个错误,说没有定义像fp这样的东西。

然后我查了php变量范围。 因为如果一个类似的东西写在另一个,它可能有效。

我尝试宣布$ fp全球;

function addtocart($pid,$qty){
        global $fp;
        fwrite($fp, 'addtocart()\nProduct ID: '. $pid .'\nQuantity: '. $qty .'\n');

我得到错误“警告:fwrite():3不是一个有效的流资源”,就像它将$ fp转换为某种整数。 为什么?

尝试使用fopen内部函数...我认为这是最好的解决方案,也许让代码为每个函数创建不同的日志文件。

希望这是有帮助的。

你可以尝试这样的事情

<?php 
$pid=$_SESSION['PID'];
$qty=$_SESSION['QTY'];
$contentToWrite="Product ID:". $pid ."Quantity:". $qty;
$writeToText = "filePathToWriteTo.php";

if (is_writable($writeToText)) {


    if (!$willWrite = fopen($writeToText, 'w')) {
         echo "writeToText Cannot open file ";
         exit;
    }


    if (fwrite($willWrite, $contentToWrite) === FALSE) {
        echo "writeToText Cannot write to this file ".$writeToText;
        exit;
    }
    fclose($willWrite);

} else {
    echo "May be security reasons ".$writeToText." is not writable";
}?>

您需要将文件处理程序传递给该函数

function addtocart($fp,$pid,$qty){
// your code
}

根据您的代码,这是最简单的方法,并且比使用$ GLOBALS要好得多。

您是否使用http://php.net/manual/es/function.error-reporting.php来显示错误,或者您可以检查Web服务器的错误日志。

更好的方法是使用$ GLOBALS []数组。

我不确定是否可以将global-keyword用于资源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM