【问题标题】:PHP, uploading image with file_put_contents make 0 byte filePHP,使用 file_put_contents 上传图像制作 0 字节文件
【发布时间】:2012-05-29 10:24:39
【问题描述】:

使用 file_put_contents 上传图片会生成 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 为 ON。

上传文件夹权限也可以。

【问题讨论】:

  • 你检查过file_get_contents的输出吗?
  • 尝试将file_get_contents 放入单独的行 - 将文件内容接收到变量中。然后您可以检查从服务器收到的内容。您需要隔离问题:加载或保存。
  • @Aleks G 我照你说的做了,但并没有改变任何东西。似乎它至少接收到 0 字节数据。
  • 好的,那么至少您知道问题出在加载数据上。接下来尝试从 具有活动 facebook 会话(即退出 facebook)的浏览器打开相关 URL。在允许您下载图像之前,facebook 可能需要一个活动会话。如果是这种情况,请查看 php.net/manual/en/function.file-get-contents.php 上的“示例 #4 使用流上下文”示例

标签: php


【解决方案1】:

要从 facebook 复制图像,脚本/php 程序需要相同的权限。如果程序/FB API 未通过验证/权限检查,则 FB 不允许下载任何图像。
看起来您的应用程序无权从 Facebook 下载/复制此图像,这就是您获得 0 字节的原因。 尝试让 PUBLIC 访问图像并在处理图像时保持 FB 帐户登录

【讨论】:

  • 你是对的。 facebook 不允许我复制图片。
  • 创建一个 Facebook 应用程序并为该应用程序提供复制所需图像所需的所有权限
【解决方案2】:

我只是把那个 URL 放到浏览器中:

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

并收到 404 Not Found 作为响应。这可以解释为什么你在本地得到空文件。我强烈建议您先加载数据,验证您收到的内容,然后,如果验证通过,则将其保存在本地。

【讨论】:

  • 我不想公开显示有效的 jpg 文件。这是一个示例图像。
  • 在任何情况下,始终首先将文件加载到变量中,处理不同的异常(未找到、权限被拒绝等) - 然后,如果您满意,请在本地保存。
【解决方案3】:

这里是解决方案。 我的 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);

有了这个_它工作得很好。是的!谢谢大家!

【讨论】:

    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2018-07-29
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多