使用php文件中的file_get_contents来定义变量

时间:2016-10-27 13:06:39

标签: php file-get-contents

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

#!/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脚本时,它返回:

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警告不会发生,但脚本不会执行。
  2. 如果我测试回显变量,两个ssl文件的文件内容就会很好地返回到屏幕。

1 个答案:

答案 0 :(得分:0)

问题#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(),您需要提供PHP数组或正确urlencode()数组到字符串中。 JSON在这里不合适。

最后但并非最不重要

你没有curl_errnocurl_error()

而失明