php脚本执行但没有输出

时间:2011-12-18 18:33:07

标签: php

我已经完成了所有类似的问题,没有什么能适合这个法案。

我正在运行一个大脚本,它在旧服务器上运行chron但在新服务器上运行失败,所以我正在使用浏览器进行测试。

我有两个函数,一个从数据库中提取属性,然后通过另一个函数运行它们将价格转换为4种货币,如果值不同则更新该行。功能如下:

<?php

    function convert_price($fore_currency, $aft_currency, $amount)
    {
        echo "going into convert<br/>";
        $url = "http://www.currency.me.uk/remote/ER-ERC-AJAX.php?ConvertFrom=" . $fore_currency .
            "&ConvertTo=" . $aft_currency . "&amount=" . $amount;
        if (!is_int((int)file_get_contents($url))) {
            //echo "Failed on convert<br/>";
            return false;
        } else {
            //echo "Conversion done";
            return (int)file_get_contents($url);
        }
    }

    function run_conversion($refno = '', $output = false)
    {
        global $wpdb;
        $currencies = array("GBP", "EUR", "TRY", "USD");
        $q = "SELECT * FROM Properties ";
        $q .= (!empty($refno)) ? " WHERE Refno='" . $refno . "'" : "";
        $rows = $wpdb->get_results($wpdb->prepare($q), ARRAY_A);
        $currencies = array("USD", "GBP", "TRY", "EUR");
        //$wpdb->show_errors();
        echo "in Run Conversion " . "<br/>";
        foreach ($rows as $row) {
            echo "In ROw <br/>";
            foreach ($currencies as $currency) {
                if ($currency != $row['Currency'] && $row['Price'] != 0) {
                    $currfield = $currency . "_Price";
                    $newprice = convert_price($row['Currency'], $currency, $row['Price']);
                    echo "Old Price Was " . $row['Price'] . " New Price Is " . $newprice . "<br/>";
                    if ($newprice) {
                        if ($row[$currfield] != $newprice) {
                            $newq = "UPDATE Properties SET DateUpdated = '" . date("Y-m-d h:i:s") . "', " .
                                $currfield . "=" . $newprice . " WHERE Refno='" . $row['Refno'] . "'";
                            $newr = $wpdb->query($newq);
                            if ($output) {
                                echo $newq . " executed <br/>";
                            } else {
                                echo "query failed " . $wpdb->print_error();
                            }
                        } else {
                            if ($output) {
                                echo "No need to update " . $row['Refno'] . " with " . $newprice . "<br/>";
                            }
                        }
                    } else {
                        echo "Currency conversion failed";
                    }
                }

            }

        }

    }

?>

然后我为了chron而从单独的文件中运行该过程,如下所示:

require($_SERVER['DOCUMENT_ROOT'] . "/functions.php"); // page containing functions
run_conversion('',true);

如果我将mysql查询限制为100个属性,它运行正常,我在一个很好的流中获得所有输出。但是当我尝试完全运行它时脚本完成(我可以从db中更新的行中看到)但没有输出。我试过增加记忆力,但没有快乐。任何想法都感激不尽。此外,从Apache模块更改为CGI时出现500错误。关于这一点的任何想法也很受欢迎,理想情况下我想将网站转换为fastCGI。

2 个答案:

答案 0 :(得分:0)

你的内存最有可能。可能在你的数据库层。最好的办法是在每个循环结束时取消设置迭代值:

foreach ( $rows as $row ) {
    ...

    foreach ( $currencies as $currency ) {
        ...
        unset( $currency, $newr, $currfield, $newprice );
    }

    unset( $row );
}

这肯定有帮助。

答案 1 :(得分:0)

另一个答案表明你可能内存不足,但如果每次循环运行时都进行HTTP调用,并且你有100多种货币,这也可能导致问题。例如,尝试将其限制为5种货币。

如果这确实是问题,我会拆分流程,因此一大块货币的每个cron作业都会更新各自的值,而不是一切。