PHP Curl -有效地验证和获取.csv文件.如何去做


PHP Curl - Validate and Fetch .csv file efficiently. How?

我对旋度函数很弱。我有一个脚本,每小时更新网络站点之间的文件。

我有三个顾虑:

  1. 精度
  2. 安全

在测试了一定长度后,它将抓取404并将其保存为csv文件,然后验证之后删除它们。但是最好直接拒绝非csv文件……即使它伪装成。csv用于恶意目的。

在这一点上,我将把它们保存到一个特殊的文件夹。是否有任何方法可以隐藏可执行(恶意)代码?我想我应该保持这个目录不可执行,以确保安全。

代码如下:

//check file exists first: 
if ( !$fp = curl_init( $url ) )
    return 'Symbiocard not found at this address ('.$url.'). Please upload manually.';
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_NOBODY, 0 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_BINARYTRANSFER, 1 );
$raw = curl_exec( $ch );
curl_close( $ch );
if ( file_exists( $newfile ) ) {
    unlink( $newfile );
} //file_exists( $newfile )
$fp = fopen( $newfile, 'x' );
fwrite( $fp, $raw );
fclose( $fp );
$required_fields = array(
     'symbiostock_site',
    'admin_email',
    'symbiostock_version' 
);

我没有通过我的验证/文件编写代码,只是因为我想在CURL级别上过滤它。

这个问题:

我如何限制curl只与真正的csv文件通信(而不是404或任何其他文档在假定的。csv位置)

您不能限制curl,但是您可以在将文件写入csv之前检查响应代码。使用curl_getinfo,您可以获得有关您请求的完整信息。

例子
$info = curl_getinfo($ch);
if ($info['http_code'] == 200) {
    // Nice
} else {
    // Not Nice
}

请注意,如果您得到200响应或矿山类型或扩展为csv并不意味着它是有效的csv。您仍然需要读取每行并验证内容。