php 用 fopen 判断网络图片是否存在
时间: 2023-12-18 21:05:21 浏览: 23
可以使用 `fopen` 和 `get_headers` 函数来判断网络图片是否存在:
```php
function isImageExists($url) {
$file = @fopen($url, "r");
if(!$file) {
return false;
}
$headers = @get_headers($url);
if($headers[0] == 'HTTP/1.1 404 Not Found') {
return false;
}
return true;
}
```
这个函数的原理是通过 `fopen` 打开远程图片,如果返回值为 `false` 则说明图片不存在。如果成功打开了图片,则使用 `get_headers` 获取图片的头部信息,判断状态码是否为 `404`,如果是则说明图片不存在,返回 `false`,否则返回 `true`。
相关问题
判断fopen写文件是否成功
可以通过判断fopen函数的返回值是否为NULL来判断文件是否成功打开。如果fopen函数返回NULL,则表示打开文件失败。例如:
```c
FILE *fp;
fp = fopen("example.txt", "w");
if (fp == NULL) {
printf("File open failed.\n");
} else {
printf("File open succeeded.\n");
// 写入文件的代码
fclose(fp); // 记得关闭文件
}
```
fopen函数读取图片
fopen函数可以用来读取二进制文件,包括图片。以下是读取图片的基本步骤:
1. 使用fopen函数打开图片文件,指定模式为二进制读取方式("rb")。
2. 判断是否成功打开文件,如果有错误,则需要使用perror或者ferror函数来输出错误信息。
3. 使用fseek函数移动文件指针到文件结尾,使用ftell函数获取文件大小。
4. 使用fseek函数将文件指针移回文件开始处。
5. 使用malloc分配足够大小的内存来存储图片数据。
6. 使用fread函数读取文件数据,将读取的数据存储到先前分配的内存中。
7. 使用fclose函数关闭文件。
8. 使用读取的数据进行后续处理。
以下是一个简单的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp;
unsigned char *buffer;
long file_size;
fp = fopen("image.jpg", "rb");
if (!fp) {
perror("Failed to open file");
return 1;
}
fseek(fp, 0, SEEK_END);
file_size = ftell(fp);
fseek(fp, 0, SEEK_SET);
buffer = (unsigned char*)malloc(file_size * sizeof(unsigned char));
if (!buffer) {
perror("Failed to allocate memory");
fclose(fp);
return 1;
}
fread(buffer, sizeof(unsigned char), file_size, fp);
fclose(fp);
// Process image data here
free(buffer);
return 0;
}
```
注意:这里使用的是unsigned char类型来存储读取的数据,因为图片文件是二进制文件,每个字节都可能是0~255之间的任意值。