使用鸟舍时出现file_get_contents错误

时间:2013-09-24 12:26:40

标签: javascript php jquery aviary

我已将鸟笼嵌入我的网页,但它工作正常,但我无法使用file_get_contents命令获取已保存的图像。

鸟舍代码:

JS:

<!-- Load Feather code -->
<script type="text/javascript" src="http://feather.aviary.com/js/feather.js"></script>

<!-- Instantiate Feather -->
<script type='text/javascript'>
var featherEditor = new Aviary.Feather({
    apiKey: '*********',
    apiVersion: 3,
    theme: 'light', // Check out our new 'light' and 'dark' themes!
    tools: 'crop,orientation,brightness,sharpness,redeye,effects,stickers,focus,contrast,whiten,warmth,colorsplash,enhance,saturation,blemish,draw,text,frames',
    appendTo: '',

    onSave: function(imageID, newURL) {
        var img = document.getElementById(imageID);
        img.src = newURL;       
    },           

    onError: function(errorObj) {
        alert(errorObj.message);
    },

    postUrl: 'http://example.com/featherposturl'      
});

function launchEditor(id, src) {
    featherEditor.launch({
        image: id,
        url: src
    });
    return false;
}

HTML:

<div id='injection_site'></div>

<img id='image1' src='photo.jpg' style="max-height:360px;" on/>

<p><input type='image' src='http://images.aviary.com/images/edit-photo.png' value='Edit photo' onclick="return launchEditor('image1', document.getElementById('image1').src);"/></p>

根据鸟舍文档,我可以获取在鸟笼服务器上创建的临时文件,但使用此PHP代码:

<?php

    $image_data = file_get_contents($_REQUEST['url']);

    file_put_contents("photo.jpg",$image_data);

?>

当我运行此错误时出现此错误

  

[2013年9月24日12:14:16 UTC] PHP警告:file_get_contents()[function.file-get-contents]:文件名不能为空......

是否有任何人有关于如何获取在鸟笼服务器上创建的文件并将副本上传到我的服务器的经验。

更新 我注意到一个名为'photo.jpg'的文件被添加到服务器,文件大小为0kb。我假设这是来自file_put_contents("photo.jpg",$image_data);,但图像数据是空白的,因为如果file_get_contents

这是错误

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

请在您的服务器allow_url_fopen = 0

上查看

如果它的值为1 file_get_contents无法正常工作

在这种情况下你可以使用curl

答案 1 :(得分:0)

Aviary会回复您选择的网址,并提供指向其服务器上保存的文件的链接。因此,您需要使用上面的服务器端代码片段在服务器上添加路由,并确保您指定的postUrl是服务器上将调用此代码的URL。

答案 2 :(得分:0)

我有同样的问题,这个答案现在可能有点晚了,但我这样做了。它不是最好的方式,但确实有效

在您的javascript中更改此内容:

onSave: function(imageID, newURL) {
        var img = document.getElementById(imageID);
        img.src = newURL;       
    },

到此:

onSave: function(imageID, newURL) {
        var img = document.getElementById(imageID);
        img.src = newURL;
        var old_image = $('#oldimage').val(); //this is a hidden field with the HTML LINK for the original image on your server
        $.ajax({
            url : 'PHP Processing page',
            type : 'POST',
            dataType : 'JSON',
            data : {oldimage : old_image, newimage : img.src},
            success : function (json) {
                console.log(json);
            }
        }); 
    }

HTML:

<input id="oldimage" type="hidden" value="ORIGINAL IMAGE" />
<button class="button special fit" onclick="return launchEditor('image1', 'ORIGINAL IMAGE');">Edit This Image</button>

在PHP处理页面中:

$default = getenv("DOCUMENT_ROOT");
define("SITEROOT",$default."/yoursite/");
define("SITEHTMLROOT", "http//www.yoursite.com/");

$oldimage = str_replace(SITEHTMLROOT, SITEROOT, $_POST['oldimage']);
$newimage = $_POST['newimage'];
copy($newimage, $oldimage);

只要将allow_url_fopen设置为on / 1,这将起作用

您无需添加

  

postUrl:'http://example.com/featherposturl'

以这种方式行

由于这篇文章很老,如果你确实找到了一个很好的方法,你会分享吗?