PHP,上传带有文件内容的图像,使文件变成0字节

PHP,上传带有文件内容的图像,使文件变成0字节,php,Php,上载包含文件内容的图像将生成0字节的文件 这是我使用的代码。我提取facebook图片url并将其放入web服务器 $fb_image_url = 'https://example.com/229282.jpg' $filename = substr($fb_image_url, strrpos($fb_image_url, '/') + 1); file_put_contents('upload/user_pic/original/'.$filename, file_get_content

上载包含文件内容的图像将生成0字节的文件

这是我使用的代码。我提取facebook图片url并将其放入web服务器

$fb_image_url = 'https://example.com/229282.jpg'

$filename = substr($fb_image_url, strrpos($fb_image_url, '/') + 1);

file_put_contents('upload/user_pic/original/'.$filename, file_get_contents($fb_image_url));
完成此操作后,服务器将成功接收文件名,但文件名为0字节

我检查了php.ini,并且启用了allow_url_fopen


上传文件夹权限也可以。

我刚刚将该URL放入浏览器:

https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/274661_1171545457_6475606_n.jpg

并收到响应中未找到的404。这将解释为什么您在本地获得空文件。我强烈建议您首先加载数据,验证您收到的数据,然后,如果验证通过,将其保存在本地。

要从facebook复制图像,script/php程序需要相同的权限。如果程序/FB API未通过验证/权限检查,FB不允许下载任何图像。
看起来你的应用程序没有从Facebook下载/复制此图像的权限,这就是为什么你会得到0字节。 在处理图像时,尝试让公众访问图像并保持FB帐户登录。以下是解决方案。 我的facebook个人资料地址有问题

$fb_image_url = 'https://graph.facebook.com/'.$facebook_id.'/picture?type=large';

$filename = $fb_id.'_'.time().'.jpg';

$result = file_get_contents($fb_image_url);

file_put_contents('upload/user_pic/original/'.$filename, $result);

有了这个,效果很好。是 啊谢谢大家

查看函数并检查
file\u get\u contents
的输出是否正确?尝试将
file\u get\u contents
放在单独的行中-将文件内容接收到变量中。然后,您可以检查从服务器收到的内容。您需要隔离问题:加载或保存。@Aleks G我按您所说的做了,但没有改变任何事情。看起来它至少接收到0字节的数据。好的,那么至少你知道问题在于加载数据。下一步,尝试从没有活动facebook会话(即注销facebook)的浏览器中打开有问题的URL。facebook在允许您下载图像之前可能需要一个活动会话。如果是这种情况,请查看“我不想在public上显示有效的jpg文件”上的“使用流上下文的示例4”。这是一个示例图像。在任何情况下,总是先将文件加载到变量中,处理不同的异常(未找到、权限被拒绝等)-然后,如果您愿意,在本地保存。您是对的。facebook没有授予我复制此图像的权限。请创建facebook应用程序,并向此应用程序提供复制此所需图像所需的所有权限