其他类似的帖子没有修复这个错误。 使用Codeigniter和Openai API生成图像。 服务器迁移后开始出现此错误。 现在它只是将 0 字节的 img 文件放在服务器上并抛出此错误。 之前是3MB的图片,不是很大。
A PHP Error was encountered
Severity: Warning
Message: file_get_contents(https://oaidalleapiprodscus.blob.core.windows.net/private/org-vsNFQNxeX6XH5mkcucSgjmwr/user-xrjvRzlnKwWRfjibOKWJRpd6/img-3VQ4qjdmWfizq6mWRGRl7TgI.png?st=2024-09-28T13%3A24%3A34Z&se=2024-09-28T15%3A24%3A34Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=d505667d-d6c1-4a0a-bac7-5c84a87759f8&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2024-09-28T00%3A48%3A37Z&ske=2024-09-29T00%3A48%3A37Z&sks=b&skv=2024-08-04&sig=6zC7Ix2wBA3L1Bn9OYW%2BeE%2BX5svP0AsRjm%2BTe%2BbobNo%3D): failed to open stream: no suitable wrapper could be found
Filename: controllers/Images.php
Line Number: 599
Backtrace:
File: /home/rztxdnnj/public_html/app/application/controllers/Images.php
Line: 599
Function: file_get_contents
File: /home/rztxdnnj/public_html/app/index.php
Line: 316
Function: require_once
尝试图像链接,它的工作
allow_url_fopen 和 file_get_contents 已开启
图像.php:
public function ai_image_generator(){
$keys_words = '';
if(isset($_POST['key_words'])):
$keys_words = html_escape($_POST['key_words']);
endif;
$image_size = '';
if(isset($_POST['image_size'])):
$image_size = html_escape($_POST['image_size']);
endif;
$ogj = str_replace(" ","%20",$keys_words);
if(!empty($image_size)){
$size = $image_size;
}else{
$size = "1024x1024";
}
if(!empty($ogj)){
$args = array(
"prompt" => $ogj,
"n"=>1,
"size"=>$size,
'model' => 'dall-e-3'
);
$data_string = json_encode($args);
$ch = curl_init('https://api.openai.com/v1/images/generations');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer '.AI_IMAGES_CODE
'Content-Type: application/json'
));
$result = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
$a = json_decode($result,true);
if(isset($a['data'])){
foreach($a['data'] as $a_child){
$image_path = 'openai_images'.rand(10,100);
$img = 'uploads/ai/'.$image_path.'.png';
$imgUrl = $a_child['url'];
file_put_contents($img, file_get_contents($imgUrl));
$img_url= base_url().'/uploads/ai/'.$image_path.'.png';
echo '<div data-url="'.$img_url.'"><img src="'.$img_url.'" alt="AI IMAGES"></div>';
}
}else{
echo '<p>'.esc_html($a['error']['message']).'</p>';
}
}else{
echo '<p>'.esc_html__('Please Enter Object Name.','gpt-blaster').'</p>';
}
die();
}
我不拥有服务器,我不确定他们做了什么或根本没有做任何事情来解决这个问题。但可以肯定的是,allow_url_fopen 和 file_get_contents 已打开。
您遇到的错误消息表明使用
file_get_contents
从 URL 检索图像时存在问题,即使您已确认 allow_url_fopen
已启用且 URL 可访问。出现此问题的原因有多种,尤其是在服务器迁移之后。以下是可能的解决方案和故障排除步骤的全面细分:
即使启用了
allow_url_fopen
,也可能存在其他服务器配置问题:
file_get_contents
访问 HTTPS URL 时失败。检查服务器是否有必要的 SSL 证书和配置。虽然
file_get_contents
很方便,但使用 cURL 通常更健壮,并提供更好的错误处理。由于 cURL 已在您的代码中使用,因此您可以修改图像下载部分以也使用 cURL。
以下是更新代码以使用 cURL 下载图像的方法:
function downloadImage($url, $path) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Only disable verification if absolutely necessary
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Only disable verification if absolutely necessary
$data = curl_exec($ch);
if (curl_errno($ch)) {
throw new Exception('Error: ' . curl_error($ch));
}
curl_close($ch);
// Save the image file
file_put_contents($path, $data);
}
public function ai_image_generator(){
// Existing code...
if (isset($a['data'])) {
foreach ($a['data'] as $a_child) {
$image_path = 'openai_images' . rand(10, 100);
$img = 'uploads/ai/' . $image_path . '.png';
$imgUrl = $a_child['url'];
try {
downloadImage($imgUrl, $img);
$img_url = base_url() . '/uploads/ai/' . $image_path . '.png';
echo '<div data-url="' . $img_url . '"><img src="' . $img_url . '" alt="AI IMAGES"></div>';
} catch (Exception $e) {
echo '<p>Error downloading image: ' . $e->getMessage() . '</p>';
}
}
} else {
echo '<p>' . esc_html($a['error']['message']) . '</p>';
}
// Existing code...
}
确保保存图像的目录 (
uploads/ai/
) 具有正确的权限设置,允许 Web 服务器写入文件。通常,将目录权限设置为 755
或 775
就足够了,但这取决于您的服务器配置。
验证服务器上是否存在可能影响对外部 URL 的传出请求的任何 DNS 问题或网络限制。这可以通过从服务器运行网络诊断来检查。
在 PHP 中启用详细错误日志记录,以捕获基本错误消息中可能不明显的任何潜在问题。更新您的
php.ini
或使用 ini_set
配置错误报告:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
按照上述步骤,您应该能够诊断并解决从 OpenAI API 下载图像的问题。切换到 cURL 进行下载并确保正确的服务器配置和权限是解决此问题的关键步骤。如果问题仍然存在,可能需要与您的托管提供商协调特定于服务器的配置和限制。