Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.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除以零?_Php_Curl - Fatal编程技术网

PHP除以零?

PHP除以零?,php,curl,Php,Curl,两小时前,以下脚本起作用。现在由于某种原因,我得到一个错误“警告:第30行被零除”。这是剧本。谁能告诉我我做错了什么以及如何纠正它 基本上,这个脚本是从另一个网站上的两个元素中提取数据,将它们分开得到一个数字,然后用这个数字来设置元素的宽度。已经对此进行了一段时间的故障排除。非常感谢 <?php define("FFF_SIXDEGREES", "http://www.stayclassy.org/fundraise?fcid=257739"); $curl = curl_init();

两小时前,以下脚本起作用。现在由于某种原因,我得到一个错误“警告:第30行被零除”。这是剧本。谁能告诉我我做错了什么以及如何纠正它

基本上,这个脚本是从另一个网站上的两个元素中提取数据,将它们分开得到一个数字,然后用这个数字来设置元素的宽度。已经对此进行了一段时间的故障排除。非常感谢

<?php
define("FFF_SIXDEGREES", "http://www.stayclassy.org/fundraise?fcid=257739");

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, FFF_SIXDEGREES);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

if(!($results = curl_exec($curl))) {
    print("{ \"total\": \"$0.00\" }");
    return;
}

$pattern = '/<li class="goalTitle">Raised so far:<\/li>\s*<li>\$([\d\.,]+)<\/li>/';
preg_match($pattern, $results, $matches);

$total = $matches[1];
$total = str_replace(",", "", $total);

// printf("<h2 class=\"raised-total\">$%s</h2>", formatMoney($total, true));

$pattern2 = '/<li class="goalTitle">My goal:<\/li>\s*<li>\$([\d\.,]+)<\/li>/';
preg_match($pattern2, $results, $matches);

$total2 = $matches[1];
$total2 = str_replace(",", "", $total2);

// printf("<h2 class=\"goal-total\">$%s</h2>", formatMoney($total2, true));

$diff = ($total/$total2) * 100; // THIS IS THE LINE OF CODE IN QUESTION

function formatMoney($number, $fractional=false) 
{
    if ($fractional) {
        $number = sprintf('%.2f', $number);
    }
    while (true) {
        $replaced = preg_replace('/(-?\d+)(\d\d\d)/', '$1,$2', $number);
        if ($replaced != $number) {
            $number = $replaced;
        } else {
            break;
        }
    }
    return $number;
} 
echo "<div class=\"progress-header\" style=\"width:$diff%;\"><span class=\"raised-amount\">$$total</span><span class=\"goal-amount\">$$total2</span></div>";

此处的错误消息非常有用。在这方面:

$diff = ($total/$total2) * 100;
<?php

    $var=4;
    $diff = (100/$var) * 100;
    echo $diff."<br><br>";

    $var=0;
    $diff = (100/$var) * 100;
    echo $diff."<br><br>";

    $var=0;
    $diff = @(100/$var) * 100; // Note the @ symbol before the possible wanring
    echo $diff."<br><br>";

?>
$total2变量有时可能等于0,因此php无法执行计算(不可能除以零)。所以你可以这样做:

if($total2) // This condition will be true if $total2 != 0
    $diff = ($total/$total2) * 100;
else
    $diff = 0;
另外,我可以在代码中看到$total和$total2是字符串,转换为float。这也可能是错误的来源。您应该使用floatval强制转换为float:

if(floatval($total2))
    $diff = ( floatval($total) / floatval($total2) ) * 100;
else
    $diff = 0;

$total2
0
,因为您设置了错误的RegExp


首先,在两种模式中的最后一个
/
之后添加
i
,将模式更改为不区分大小写(例如,您在网站上获得了迄今为止提出的
,但您使用的是迄今为止提出的
)。接下来,检查您的两个
$matches

中得到了什么,因为它实际上只是一个警告,不会导致脚本停止,您还可以使用以下方法简单地使该行上的消息静音:

$diff = ($total/$total2) * 100;
<?php

    $var=4;
    $diff = (100/$var) * 100;
    echo $diff."<br><br>";

    $var=0;
    $diff = (100/$var) * 100;
    echo $diff."<br><br>";

    $var=0;
    $diff = @(100/$var) * 100; // Note the @ symbol before the possible wanring
    echo $diff."<br><br>";

?>
基本上,它将渲染为零。这不是最好的方法,但就效率而言,如果要处理大量数据,与对每行数据执行验证相比,最好不要显示警告


这可能不是我会做的(尽管我曾经做过一次),但我想我会提供它作为一个建议。

提供代码行通常也会有所帮助。很少有人会去数代码中的行……你能标记行吗?我不想数数……我要冒险说这是唯一一条有除法的线<代码>$diff=($total/$total2)*100
显然
$total2
是0。我可以看到你正在除以
$total2
。有可能是空的吗?非常感谢你们的快速回复。如果你去这个地址,“$total2”是在该网站上“我的目标”下的数字,即$1000。我不明白为什么我会得到一个0的值。嘿,伙计,谢谢你的回复。它实际上并不是在吐数据。如果你走到这里,你可以看到:@Noah如果它吐出数据与否有什么关系?您仍然可以使用这里给出的建议。谢谢您的回复。如果你去地址stayclassy.org/fundraise?fcid=257739,“$total2”在该网站的“我的目标”下拉取数字,即1000美元。我不明白为什么我会得到一个0的值。这里是生产站点:就在
$total2=$matches[1]之前请输入此行
打印($matches);模具()并将结果粘贴到这里。我检查了你的页面。您应该在regexp的末尾添加'i',以确保测试不区分大小写。然后,您将通过上面的print\r看到$total2变量是否包含正确的值。Elon,修复了它!谢谢