Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php变量作用域和fwrite内部函数_Php - Fatal编程技术网

php变量作用域和fwrite内部函数

php变量作用域和fwrite内部函数,php,Php,我试图弄清楚我的add-to-cart进程哪里出了问题,所以我决定添加一些日志代码(fwrite),然后我很快就了解了php变量范围。现在我被卡住了 在学习变量作用域之前,我尝试的第一件事是 $fp = fopen('logs/functions.txt', 'w'); function addtocart($pid,$qty){ fwrite($fp, 'addtocart()\nProduct ID: '. $pid .'\nQuantity: '. $qty .'\n');

我试图弄清楚我的add-to-cart进程哪里出了问题,所以我决定添加一些日志代码(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);

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

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

function addtocart($fp,$pid,$qty){
// your code
}
根据您的代码,这是最简单的方法,比使用$GLOBALS要好得多


您是使用来显示错误,还是可以查看web服务器的错误日志。

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


我不确定是否可以使用全局关键字访问资源。

尝试在函数内部使用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";
}?>


3
来自何处?打开文件后,在$fp上进行var_转储,似乎文件未打开。您的代码应该是正常的(使用全局时)-您可能没有对
logs/functions.txt
的写入权限…您试图实现什么?只是为了写文件吗?艾玛:这就是我想知道的。David:我有权限,在函数外任意写一个“write to”来写入所述文件。我正试图用愚蠢的方式记录错误。我这么说是因为我不知道我想要达到的目标的最佳方式是什么。谢谢你花时间写这篇文章。但是,这只是引用会话数组“cart”的多个函数之一,其中存储了多个pid和qty。我能把这些都放在函数里吗?
<?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";
}?>