PHP Curl - 有效地验证和获取.csv文件。怎么样?

时间:2013-05-20 20:58:17

标签: php validation csv curl fetch

我的卷曲功能非常弱。我有一个脚本,每小时例程来更新网络站点之间的文件。

我有三个问题:

  1. 效率
  2. 准确性
  3. 安全
  4. 经过一段时间的测试后,会抓取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位置的任何其他文档)进行通信。

1 个答案:

答案 0 :(得分:1)

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

示例

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

请注意,如果您收到200个回复,或者地雷类型或扩展名为csv并不意味着它是有效的csv。您仍然需要阅读每一行并验证内容。