В основном:
@curl_exec($ch);
Вы предполагаете, что curl exec'd правильно, и выбрасываете его возвращаемое значение.Если при выполнении запроса возникла проблема, exec возвращает false и curl_error, а curl_errno будет содержать диагностическую информацию о том, что и как произошло.Никогда не предполагайте, что завиток удался.Слишком много причин для провала, но только один путь к успеху.Как минимум, измените свой код на:
if (curl_exec($ch) === FALSE) {
die("Curl error: " . curl_error($ch));
}
, чтобы понять, почему все погибло.В противном случае вы просто получите странные результаты и упустите шанс увидеть, почему они произошли.