הקוד התמים:
<?php
$url = 'https://gtfs.mot.gov.il/gtfsfiles/zones_2022.zip';
// $data = call_api( $url, [] );
$data = call_api( $url );
var_dump( $data );
function call_api( $url )
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// Receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// curl_setopt($ch,CURLOPT_CAINFO,'cacert.pem');
// curl_setopt($ch,CURLOPT_CAPATH,'cacert.pem');
// curl_setopt($ch, CURLOPT_CAINFO, 'ca-bundle.crt');
$server_output = curl_exec($ch);
$error_msg = false;
if (curl_errno($ch)) {
$error_msg = curl_error($ch);
}
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close ($ch);
return [ 'code' => $http_code, 'output' => $server_output, 'error' => $error_msg ];
}
הרצה של הקוד הזה מביאה את התוצאה עם השגיאה:
array(3) {
["code"]=>
int(0)
["output"]=>
bool(false)
["error"]=>
string(63) "SSL certificate problem: unable to get local issuer certificate"
}
ראיתי ב-stackoverflow הצעה להוריד את תעודת האבטחה מ-https://curl.se/ca/cacert.pem אבל גם זה לא עזר (מופיע בקוד למעלה בשורה מבוטלת)
לצערי גם הפתרון שזכה שם ל-724 הצבעות לא עזר במקרה שלי
ניסיתי את הקוד משרתים שונים: אירוח אתרים של hostinger, אירוח של hostgator, שרת VPS של box
בכולם השגיאה חוזרת על עצמה
היה מי שהציע לבדוק אם הזמן בשרת מכוון, הגדרתי את ה-VPS לשעון ישראל אבל גם זה לא פתר את הבעיה
בדקתי גם את ההצעה של @dovid באשכול דומה:
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
אבל גם אז אני מקבל שגיאה:
array(3) {
["code"]=>
int(0)
["output"]=>
bool(false)
["error"]=>
string(53) "OpenSSL SSL_read: Connection reset by peer, errno 104"
}
חשוב לציין שכל השרתים אינם עוברים דרך הרשת של נטפרי