Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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
cURL远程调用的php while循环失败_Php_Curl - Fatal编程技术网

cURL远程调用的php while循环失败

cURL远程调用的php while循环失败,php,curl,Php,Curl,长期用户,第一次发帖,感谢您的耐心等待 当通过cURL远程调用php代码时,除非我注释掉while循环,否则会失败,这当然会破坏代码读取文件的目的。对于我来说,fgets是正确的文件读取工具,因为该文件包含以换行符结尾的文本行 我使用$readWorks创建了一个稍微笨拙的构造,以帮助组合while和if子句,并在注释掉while循环时使代码能够工作 <?php define( "IPDIRFILE", "path/to/ipfile.csv" ); // Lookup in standa

长期用户,第一次发帖,感谢您的耐心等待

当通过cURL远程调用php代码时,除非我注释掉while循环,否则会失败,这当然会破坏代码读取文件的目的。对于我来说,fgets是正确的文件读取工具,因为该文件包含以换行符结尾的文本行

我使用$readWorks创建了一个稍微笨拙的构造,以帮助组合while和if子句,并在注释掉while循环时使代码能够工作

<?php
define( "IPDIRFILE", "path/to/ipfile.csv" ); // Lookup in standard file location as with local lookups
$readWorks = true;
$ipLookup = fopen( IPDIRFILE, "r" );
if ($ipLookup) {
//  while ( $readWorks ) { // Uncomment this loop to produce failure
    if (($ipline = fgets( $ipLookup )) !== false) {
        echo "Got the line with fgets: " . $ipline . "<br>";
    } else {
        echo "Can't fgets the line<br>";
        $readWorks = false;
    }
}
//} // Ending brace

fclose( $ipLookup );

?>
下面是调用php的代码:

<?php
$varString = null;

$pgtCon = curl_init( 'http://domain/path/to/ipfinder.php' );
curl_setopt( $pgtCon, CURLOPT_CONNECTTIMEOUT, 30 );
curl_setopt( $pgtCon, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" );
curl_setopt( $pgtCon, CURLOPT_POST, true );
curl_setopt( $pgtCon, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $pgtCon, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $pgtCon, CURLOPT_FOLLOWLOCATION, 1 );

// The content immediately below merely provides something to POST
$ipGeolocRequest = array();
// IP addresses pushed to $ipGeolocRequest

foreach ( $ipGeolocRequest as $ipIdx => $ipVal ) { // construct POST data
    $varString .= $ipIdx . "=" . $ipVal . "&";
}
$varString = substr($varString, 0, -1); // remove trailing ampersand

if (curl_setopt( $pgtCon, CURLOPT_POSTFIELDS, $varString )) {
    $geoData = curl_exec( $pgtCon );
} else {
    echo "Option set failed<br>";
}
curl_close( $pgtCon );

unset( $varString );

echo $geoData . "<br>";

?>
根据其他帖子,我已经确保在cURL调用之后POST字符串是未设置的。当通过浏览器地址栏在本地调用时,顶部的远程调用代码无论是否使用while循环都能完美地工作。我认为,这表明文件已正确打开并读取,而脚本在其他方面也可以正常工作

我是卷发新手,所以我肯定我错过了什么!对我来说,这也像是你错过了一些显而易见的事情-


为什么这个cURL调用会导致php while循环失败?

while循环之前定义了$readWorks吗?因为我看不见。是的,它不见了。我在测试环境中的while循环之前添加了它,然后进行了检查,循环仍然失败。现在我将尝试编辑我的原始帖子…谢谢你的关注。没问题,但这就是我所注意到的,我希望你能得到需要的答案!顺便说一句,您不应该在CSV文件上使用fgets,最好使用fgetcsv。。。在任何情况下,while循环失败是什么意思?