2013-12-13 3 views
0

Я создаю сайт на своей локальной машине с Windows 8 dev (используя wamp). У меня есть PHP-скрипт, который предположительно принимает файлы изображений из каталога на моем сервере и загружает их в WordPress Когда у меня есть один файл в каталоге, все работает нормально. Когда я изменяю код для загрузки нескольких файлов из каталога, загружается только одно изображение, и я получаю сообщение об ошибке: file_get_content(/path/to/directory/): failed ot open stream. Permission denied in /path/to/script/ Вот изображение ошибки, которую я получаю http://i.imgur.com/rRvxKa0.jpgPHP-скрипт возвращает «file_get_contents

Вот код, который работает с одним файлом в каталоге:

global $post; 

    $rpcurl = get_bloginfo('url') . "/xmlrpc.php"; 

    $username = 'admin'; 
    $password = 'admin'; 
    $blogid = $post->ID; //Post ID 

    $post_idn = get_post_meta($post->ID, 'VIN', true); 

    $post_dir = dirname(get_template_directory()) . "/" . $post_idn; 

    $file = file_get_contents($post_dir . "/file.jpg"); 

    $filetype = "image/jpeg"; 

    $filename = "remote_filename.jpg"; 

    xmlrpc_set_type($file,'base64'); // <-- required! 
    $params = array($blogid,$username,$password, 
       array('name'=>$filename,'type'=>$filetype,'bits'=>$file,'overwrite'=>false)); 
    $request = xmlrpc_encode_request('wp.uploadFile',$params); 

    function go($request,$rpcurl){ 
     $ch = curl_init(); 
     curl_setopt($ch,CURLOPT_POST,1); 
     curl_setopt($ch,CURLOPT_URL,$rpcurl); 
     curl_setopt($ch,CURLOPT_POSTFIELDS,$request); 
     curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
     $result = curl_exec($ch); 
    } 

    $result = go($request,$rpcurl); 
    print_r($result); 

Вот код, который должен загружать несколько изображений.

$rpcurl = get_bloginfo('url') . "/xmlrpc.php"; 

    echo $rpcurl; 

    $username = 'admin'; 
    $password = 'admin'; 
    $blogid = $post->ID; //Post ID 

    echo $blogid; 

    $post_idn = get_post_meta($post->ID, 'VIN', true); 

    echo "<h1>" . $post_idn ."</h1>"; 

    $post_dir = dirname(get_template_directory()) . "/" . $post_idn; 

    $fileslist = scandir($post_dir); 

    foreach ($fileslist as $file) { 

     $file = file_get_contents($post_dir . "/" . $file); 

     $filetype = "image/jpeg"; 

     $filename = "remote_filename.jpg"; 

     xmlrpc_set_type($file,'base64'); // <-- required! 
     $params = array($blogid,$username,$password, 
        array('name'=>$filename,'type'=>$filetype,'bits'=>$file,'overwrite'=>false)); 
     $request = xmlrpc_encode_request('wp.uploadFile',$params); 
    } 

     function go($request,$rpcurl){ 
      $ch = curl_init(); 
      curl_setopt($ch,CURLOPT_POST,1); 
      curl_setopt($ch,CURLOPT_URL,$rpcurl); 
      curl_setopt($ch,CURLOPT_POSTFIELDS,$request); 
      curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
      $result = curl_exec($ch); 
     } 

     $result = go($request,$rpcurl); 
     print_r($result); 
+0

Вы проверили все права доступа к файлам в каталоге? –

+0

Разрешения для файлов в порядке, потому что он будет загружать файл с именем file.jpg, но не любой из других. – user715564

ответ

1

scandir will return . and .., along with all real files and subdirectories. Вам нужно отфильтровать те из:

foreach ($fileslist as $file) { 
    if($file === '.' || $file === '..') { 
     continue; 
    } 

    $file = file_get_contents($post_dir . "/" . $file); 

    $filetype = "image/jpeg"; 

    $filename = "remote_filename.jpg"; 

    xmlrpc_set_type($file,'base64'); // <-- required! 
    $params = array($blogid,$username,$password, 
       array('name'=>$filename,'type'=>$filetype,'bits'=>$file,'overwrite'=>false)); 
    $request = xmlrpc_encode_request('wp.uploadFile',$params); 
} 

наводки здесь сообщение об ошибке: file_get_contents(/path/to/directory/): failed to open stream. Permission denied in /path/to/script/ Если $file был реальный файл, вы увидите /path/to/directory/somefile.extension, а не только /path/to/directory/.

Кроме того, вы даете каждому загруженному файлу одно и то же имя файла этой строкой: $filename = "remote_filename.jpg"; Итак, независимо от того, сколько файлов загружено, в конце остается только один (первый из 'overwrite'=>false).

+0

Спасибо за помощь. Я просто заметил «.». и "..". Это устранило ошибки, но загружается только один файл. Я предполагаю, что это имеет какое-то отношение к заявлению foreach. – user715564

+0

Смотрите мой последний абзац выше (только что добавлен) - вы даете каждому файлу одно и то же имя, поэтому только один сохраняется. –

+0

Ах, я вижу. Спасибо за помощь. – user715564

Смежные вопросы