我正在试图找出我的添加到购物车进程的地方搞砸了,所以我决定添加一些日志代码(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转换成某种整数一样。为什么呢?
答案 0 :(得分:1)
尝试使用fopen内部函数...我认为这是最好的解决方案,也许让代码为每个函数创建不同的日志文件。
希望这有用。
答案 1 :(得分:1)
您可以尝试这样的事情
<?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";
}?>
答案 2 :(得分:0)
您需要将文件处理程序传递给函数
function addtocart($fp,$pid,$qty){
// your code
}
根据您的代码,这是最简单的方法,并且比使用$ GLOBALS要好得多。
您是否使用http://php.net/manual/es/function.error-reporting.php来显示错误,或者您可以查看网络服务器的错误日志。
答案 3 :(得分:0)
更好的方法是使用$ GLOBALS []数组。
我不确定是否可以将global-keyword用于资源。