在 php 文件中使用 file_get_contents 定义变量

Using file_get_contents in php file to define variable

我正在使用 ServerPilot API 将自签名 SSL 证书应用到 ServerPilot 应用程序。我已经准备好了 csr、key 和 crt 文件。现在我使用下面提供的脚本将密钥和 crt txt 文件的内容保存到一个变量,然后可以在脚本中使用该变量保存到 ServerPilot 应用程序。

#!/usr/bin/php

<?php
$clientid = "redacted";
$apikey = "redacted";

$appid = file_get_contents("temp_serverpilot-appid_filtered.txt");

$vardomainname = file_get_contents("temp_serverpilot-domainname.txt");

$sslkey = file_get_contents("/root/certs/$vardomainname/ssl.key");

$sslcert = file_get_contents("/root/certs/$vardomainname/ssl.crt");

$data = array(
    "key" => $sslkey,
    "cert" => $sslcert,
    "cacerts" => null
);
$data_string = json_encode($data);

$ch = curl_init("https://api.serverpilot.io/v1/apps/$appid/ssl");
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$clientid:$apikey");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($data_string))
);


$result = curl_exec($ch);
curl_close($ch);

echo json_encode(json_decode($result), JSON_PRETTY_PRINT);

有两个问题: 1. 在 $sslkey 和 $sslcert 变量上使用 file_get_contents 在路径中有另一个变量。当我 运行 php 编写脚本时 return 是这样的:

PHP Warning:  file_get_contents(/root/certs/mydomainredacted.com/ssl.key): failed to open stream: No such file or directory in /root/serverpilot-ssl-apply.php on line 11
Warning: file_get_contents(/root/certs/mydomainredacted.com/ssl.key): failed to open stream: No such file or directory in /root/serverpilot-ssl-apply.php on line 11
  1. 如果我在$sslkey和$sslcert变量中手动输入域名进行测试。 PHP 警告不会发生,但脚本不会执行。

如果我测试回显变量,两个 ssl 文件的文件内容 return 到屏幕就好了。

第 1 期

$vardomainname 的字符串不正确。缺少字符、太多字符、隐藏字符或完全错误; idk.

"/root/certs/$vardomainname/ssl.key" 不存在。

您无权访问 "/root/certs/$vardomainname/ssl.key"


第 2 期

变化:

curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);

进入

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

CURLOPT_POSTFIELDS section of curl_setopt() you need to provide either a PHP array or properly urlencode()数组转化为字符串。 JSON 在这里不合适。


最后但并非最不重要的

没有curl_errno and curl_error()

你就瞎了