1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

WordPress自动保存远程图片

本帖由 laogui2007-07-14 发布。版面名称:源码讨论

  1. laogui

    laogui Administrator
    管理成员

    注册:
    2005-08-30
    帖子:
    15,216
    赞:
    35
    给WordPress编辑器增加“自动保存远程图片”功能的方法:

    自动保存远程图片修改方法如下:

    1、在wp-admin/edit-form-advanced.php 第167行

    HTML:
    <span id="autosave"></span>
    后面加增加

    HTML:
    Save pic:<input type="checkbox" name="savepic" value="checked" />
    2、修改 wp-admin/post.php,将第7行的

    PHP:
    wp_reset_vars(array('action''safe_mode''withcomments''posts''content''edited_post_title''comment_error''profile''trackback_url''excerpt''showcomments''commentstart''commentend''commentorder'));
    改为

    PHP:
    wp_reset_vars(array('action''safe_mode''withcomments''posts''content''edited_post_title''comment_error''profile''trackback_url''excerpt''showcomments''commentstart''commentend''commentorder''savepic'));
    3、在wp-admin/admin-functions.php 的开头增加

    PHP:
    function open($file,$type=''){
           global 
    $fromurl,$referer;
           
    $cachename=$file;
                   if(
    $type){
                           
    $file=$fromurl.'/'.$type.'/'.$file;
                   }else{
                           
    $file=$fromurl.$file;
                   }
                    if(
    $open=file($file)){
                                           
    $count=count($open);
                                           for(
    $i=0;$i<$count;$i++){
                                                   
    $theget.=$open[$i];
                                           }                                      
                                   }else{
                                           die(
    '请求过多,超时,请刷新');
                                   }              
           return 
    $theget;
    }
     
    function 
    cut($file,$from,$end){
     
            
    $message=explode($from,$file);
            
    $message=explode($end,$message[1]);
    return        
    $message[0];
    }
    function 
    dhtmlspecialchars($string) {
     if(
    is_array($string)) {
      foreach(
    $string as $key => $val) {
       
    $string[$key] = dhtmlspecialchars($val);
      }
     } else {
      
    $string str_replace('&''&amp;'$string);
      
    $string str_replace('"''&quot;'$string);
      
    $string str_replace('<''&lt;'$string);
      
    $string str_replace('>''&gt;'$string);
      
    $string preg_replace('/&amp;(#\d;)/''&\1'$string);
     }
     return 
    $string;
    }
    function 
    random($length) {
     
    $hash '';
     
    $chars 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
     
    $max strlen($chars) - 1;
     
    mt_srand((double)microtime() * 1000000);
     for(
    $i 0$i $length$i++) {
      
    $hash .= $chars[mt_rand(0$max)];
     }
     return 
    $hash;
    }
     
    function 
    mkdirs($dir)
    {
            if(!
    is_dir($dir))
            {
                    
    mkdirs(dirname($dir));
                    
    mkdir($dir);
            }
            return ;
    }
    再在

    PHP:
    $_POST['post_content'] = $_POST['content'];
    的后面添加以下代码:
    注意,上面的代码有两个地方有,要在最后那个的后面加

    PHP:
    if($_POST['savepic']=="checked"){
    // begin to save pic;
    $img_array = array();
    $content1 stripslashes($_POST['post_content']);
    if (
    get_magic_quotes_gpc()) $content1 stripslashes($content1);
    //echo $content1;//文章内容嘿嘿开始处理了
    preg_match_all("/(src|SRC)=\"(http:\/\/(.+).(gif|jpg|jpeg|bmp|png))/isU",$content1,$img_array);//正则开始匹配所有的图片并放入数据
    $img_array array_unique(dhtmlspecialchars($img_array[2]));
     
    print_r($img_array);
    set_time_limit(0);
     
     
    foreach (
    $img_array as $key => $value) {
    $get_file file_get_contents($value);//开始获取图片了哦
    $filetime time();
    $filepath "../wp-content/uploads/pic2/".date("Y",$filetime)."/".date("m",$filetime)."/";//图片保存的路径目录
    !is_dir($filepath) ? mkdirs($filepath) : null
    $filename date("YmdHis",$filetime).random(1).'.'.substr($value,-3,3);
    $fp = @fopen($filepath.$filename,"w");
    @
    fwrite($fp,$get_file);
    fclose($fp);//完工,哈
    $content1 preg_replace("/".addcslashes($value,"/")."/isU""/wp-content/uploads/pic2/".date("Y",$filetime)."/".date("m",$filetime)."/".$filename$content1);   //顺便替换一下文章里面的图片地址
     
    }
     
    $_POST['post_content'] = $content1;
     
    // end save pic;
    }
    完毕。

    现在,你再发表文章时,提交按钮旁边多了个选项

    选中“save pic”,再点“发表”,即可保存远程图片了。

    总结一下,要修改的文件有:

    edit-form-advanced.php
    post.php
    admin-functions.php
     
  2. laogui

    laogui Administrator
    管理成员

    注册:
    2005-08-30
    帖子:
    15,216
    赞:
    35
    我在2.2.1下没任何问题,其他版本未知,图片保存路径可以在最后面那段代码里改
     
  3. zmnet

    zmnet Well-Known Member

    注册:
    2006-05-03
    帖子:
    7,809
    赞:
    62
    谢谢
     
  4. usbiz

    usbiz New Member

    注册:
    2006-04-26
    帖子:
    4
    赞:
    0
    怎么实验了下不行了

    能把你改好的文件 发上来吗?
     
  5. 清风飘客

    清风飘客 New Member

    注册:
    2006-08-22
    帖子:
    8
    赞:
    0
    老鬼太有才了,很实用,收下了
     
  6. usbiz

    usbiz New Member

    注册:
    2006-04-26
    帖子:
    4
    赞:
    0
    楼上的兄弟 成功没有??
     
  7. usbiz

    usbiz New Member

    注册:
    2006-04-26
    帖子:
    4
    赞:
    0
    没人帮个忙吗?
     
  8. flyingtime

    flyingtime Member

    注册:
    2007-07-26
    帖子:
    92
    赞:
    0
    这个太占空间了,还有盗链老鬼网站的图片好。。
     
  9. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    不太喜欢去修改核心文件。

    如果可以通过插件来实现这个功能,或许更好。
     
  10. bssn

    bssn New Member

    注册:
    2006-03-11
    帖子:
    46
    赞:
    0
    同意楼上,要是能出个插件的话就好了!
     
  11. ameliagj

    ameliagj New Member

    注册:
    2006-08-28
    帖子:
    3
    赞:
    0
    老鬼 不行啊 能不能把你的修改好的三个文件传上来啊
     
  12. ameliagj

    ameliagj New Member

    注册:
    2006-08-28
    帖子:
    3
    赞:
    0
    这种错误是怎么回事啊?

     
  13. 八匹肥狼

    八匹肥狼 New Member

    注册:
    2007-10-28
    帖子:
    1,867
    赞:
    0
    老鬼,问个问题~
    我用的是WP2.3.1,按你的方法加进代码,其中把后面那两段加进了wp-admin\includes\post.php里

    并且打开了PHP.INI的output_buffering

    发布文章,程序会在我指定的目录建立图片,文章内的相关图片地址也会自动更改

    但是....有一个很重要的问题........

    ............上传的所有图片大小都为0............请问怎么解决呢?先谢过了~
     
  14. laogui

    laogui Administrator
    管理成员

    注册:
    2005-08-30
    帖子:
    15,216
    赞:
    35
    我也遇到过,我的是上传太多的原因
     
  15. 八匹肥狼

    八匹肥狼 New Member

    注册:
    2007-10-28
    帖子:
    1,867
    赞:
    0
    :p问题解决了.............

    之前没认真看程序..........没打开allow_url_fopen:D

    现在行了,3Q3Q:)
     
  16. sandicyao

    sandicyao New Member

    注册:
    2007-05-10
    帖子:
    13
    赞:
    0
    来学习了 最近有朋友推荐了一个适合做企业站的theme
     
  17. 土坷垃

    土坷垃 New Member

    注册:
    2005-09-04
    帖子:
    22
    赞:
    1
    最新版不能用了,老鬼有时间修改下吗?
     
  18. laogui

    laogui Administrator
    管理成员

    注册:
    2005-08-30
    帖子:
    15,216
    赞:
    35