长期用户,首次发布海报,感谢您的耐心等待!
当通过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
的全新人物,所以我确定我错过了一些东西! (当你错过一些明显的东西时,它也闻到了我的味道; - )
为什么这个cURL
调用导致php while循环失败?