Skip to content

Problem with curl for PHP runtime #584

@decryptable

Description

@decryptable

Bug report

Description

At the beginning of the deployment, using curl had no problems at all. But 1 day later, the API suddenly responded to an error with a message: “Call to undefined function curl_init()”. I tried several solutions in the problem report history of this repository with the same problem, but all of them did not work at all.

I tried the following:

  1. Changing the NodeJS version to 18.x, 20.x, 22.x
  2. Changed the version of vercel-php in vercel.json with several versions: 0.7.3, 0.6.2
  3. Changed the use of curl_* to file_get_contents with stream_context_create customization using the same flow

From all the experiments above, the API now does not provide any response, only a blank page with HTTP 200 status code. Actually this is a simple project to create a RESTFull API by calling the API from another server, then returning the response back to the client. Here are some code on my project:

Image

project-structure
├─ api
│  ├─ debug.php
│  └─ handler.php
├─ index.min.html
├─ openapi.min.json
└─ vercel.json

vercel.json :

{
  "functions": {
    "api/**/*.php": {
      "runtime": "[email protected]"
    }
  },
  "routes": [
    { "src": "/", "dest": "/index.min.html" },
    { "src": "/oas", "dest": "/api/handler.php" },
    { "src": "/debug", "dest": "/api/debug.php" },
    { "src": "/api/(.*)", "dest": "/api/handler.php" }
  ]
}

api/debug.php :

<?php phpinfo();

api/handler.php:

<?php
// error_reporting(0);

// ...some code

try {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $body = file_get_contents('php://input');

    if (
        $method === 'GET' &&
        !empty($operation['requestBody']) &&
        empty($body)
    ) {

        $body = json_encode($_GET);
    }


    curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $forwardedHeaders);

    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);


    $contentType = 'text/plain';
    try {
        json_decode($response, false, 512, JSON_THROW_ON_ERROR);
        $contentType = 'application/json';
    } catch (JsonException $e) {
        $contentType = 'text/plain';
    }

    http_response_code($httpCode);
    header("Content-Type: $contentType");
    echo $response;
} catch (\Throwable $th) {
    echo json_encode([
        "code" => "500",
        "message" => "There is a gateway server error, please try again in a while.",
        "data" => $th->getMessage()
    ]);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions