嘿,我在这里看到了几个关于这个主题的问题,但是没有一个问题解决了我的问题。我的网站上有一个脚本,我想用它来为我的用户生成几种不同类型的电子邮件。我想要一种能够为不同的电子邮件创建模板文件的方法,这些电子邮件接受$ _POST变量来填充相关信息,并简单地向这些模板发出请求并获取作为电子邮件正文的回复。我正在尝试编写一个函数来接受模板文件的位置(相对或绝对可以工作,但我更愿意相对老实说),以及我希望通过post发送到模板的参数数组。到目前为止,我没有运气。到目前为止,这是我的代码:
private function post_request($url, $data) {
$output = array();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = curl_exec($ch);
curl_close($ch);
if ($result) {
$output['status'] = "ok";
$output['content'] = $result;
} else {
$output['status'] = "failure";
$output['error'] = curl_error($ch);
}
curl_close($ch);
return $output;
}
我从curl得到错误“无法连接到主机”,但在将我的网址输出到错误日志后,我已经能够验证将URL复制并粘贴到firefox中会导致正确查看页面。
有什么想法吗?我没有使用curl的想法,所以如果有更好的选择,我会非常乐意使用它。谢谢大家的帮助!
答案 0 :(得分:0)
您应该可以使用file_get_contents(),只要您的主机没有阻止它访问远程位置(并且$ url脚本不专门查找POST数据)。
private function post_request($url, $data) {
$output = array();
$url_with_data = '';
foreach ( $data as $k=>$v ){ // Loop through data and create request string
$url_with_data .= '&' . $k . '=' . $v;
}
// Remove first ampersand and encode the data
$url_with_data = urlencode( substr( $url_with_data, 1 ) );
// Request file
// Format will be http://url.com?var1=data&var2=data&var3=data
$result = file_get_contents( $url . '?' . $url_with_data );
if ($result) {
$output['status'] = "ok";
$output['content'] = $result;
} else {
$output['status'] = "failure";
$output['error'] = 'Could not open remote file';
}
return $output;
}
答案 1 :(得分:0)
另一种选择:您说两个文件都驻留在同一台服务器上。如果是这种情况,您可以只需要()模板构建器。
private function post_request($url, $data) {
$output = array();
@require_once('./path/to/template_builder.php');
if ($result) {
$output['status'] = "ok";
$output['content'] = $result;
} else {
$output['status'] = "failure";
$output['error'] = 'Could not open remote file';
}
return $output;
}
然后在template_builder.php中:
<?php
unset( $result );
if ( is_array( $data ) ){
// Parse $data ...
$result = $email_template;
}
答案 2 :(得分:0)
事实证明,问题最终是服务器配置错误。服务器在尝试联系文件时超时,因为它遇到了错误的DNS服务器。修复解决了我的问题!