我正试图弄清楚我的添加到购物车的过程在哪里出错,所以我决定添加一些日志代码(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-global;
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";
}?>
一个更好的方法是使用$GLOBALS[]数组。
我不确定是否可以对资源使用全局关键字。
您需要将文件处理程序传递给函数
function addtocart($fp,$pid,$qty){
// your code
}
根据您的代码,这是最简单的方法,而且比使用$GLOBALS要好得多。
你在用吗http://php.net/manual/es/function.error-reporting.php以显示错误,或者您可以查看web服务器的错误日志。