Avatar billede frexxit Juniormester
28. november 2016 - 11:57 Der er 5 kommentarer og
1 løsning

Glob / nlist & mkdir <->ftp server

Hej eksperter, her en local server med en ip adresse, som min side henter data fra ( overvågnings videoer), men da siden, selvfølgelig er langsom når den henter vil jeg gerne filerne bliver flyttet over på hjemmeside serveren, problemet er så bare følgende:

1. jeg har en sti på local server som fx. hedder:
Dennis_test/cam1/folder_name/record/file_name.mkv
- jeg vil så gerne have flyttet filerne over så de får en sti der hedder:

Dennis_test/cam1/create_year/create_month/creadte/day/file_name.mkv

det kræver jo så at mapperne bliver oprettet ud fra file dato osv, dette har jeg også lavet, og virker fint, men da jeg så har to kamera sat op, vil den jo så lave to mapper (cam1 / cam2) jeg kan så ikke få det til at virke så de kommer i hver sine mapper.

jeg er ikke særlig skarp i det her, så gerne skær det ud i pap :)
koden her under virker sådan set fint nok, bare ikke når der pludselig er flere mapper der skal oprettes hvor filerne skal deles ud i hver mappe til hver sit kamera osv.


<?php
date_default_timezone_set('America/Mexico_City');   

//echo 'Get all users ids and folder_names list one by one<br>';


// set SimpleFTP object, use host, username and password
    $ftp = new SimpleFTP("XXX.XXX.XXX.XXX", "username", "password");

$show_footer = $mysqli->query("SELECT * FROM users WHERE active = '1' AND folder_name != ''");

        while($show_foot = $show_footer->fetch_object())
                {

// connect to FTP server
    if($ftp->connect()) {
          //print "Connection successful </br>";

$ftp->cd($show_foot->folder_name);

$file_name = $ftp->ls(".");

foreach ($file_name as $files) {

if ($files == '.DS_Store') {
// do nothing, just skip this   
} else
    {

    // connect and login to FTP server
$ftp_server = "XXX.XXX.XXX.XXX";
$ftp_username = 'username';
$ftp_userpass = 'password';

$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);

$file = $show_foot->folder_name."/".$files;

// get the last modified time
$lastchanged = ftp_mdtm($ftp_conn, $file);
if ($lastchanged != -1)
  {
  $create_year = date("Y",$lastchanged);
  $create_monthe = date("F",$lastchanged);
  $create_day = date("d",$lastchanged);
  }
else
  {
  echo "Could not get last modified";
  }
   
$filename_new     = "account/include/users/".$show_foot->id."/".$create_year."/".$create_monthe."/".$create_day."/".$files;

$structure         = "account/include/users/".$show_foot->id."/".$create_year."/".$create_monthe."/".$create_day;

  if (!file_exists($structure)) {

            mkdir($structure, 0777, true);
        }

    if (!file_exists($filename_new)) {
        if($ftp->get($files, $filename_new,FTP_BINARY)) {
            print $files." downloaded<br>";
      } else {
            print "<br />Download failed: " . $ftp->error;
      }
        }
        }
          }   
    } else {
          // connection failed, display last error
          print "Connection failed: " . $ftp->error;
    }
}


?>
Avatar billede jakobdo Ekspert
29. november 2016 - 09:58 #1
Hvor langt når du?
Hvad er det der driller?
Lad os tage den step by step, så skal vi nok komme i mål. :)
Avatar billede frexxit Juniormester
29. november 2016 - 12:48 #2
Hej Jakobdo. :)

Har sådan set fået det til at virke, men er HELT sikker på det ikke er den pæneste og rigtige måde at gøre det på :)

sender lige koden som virker, så kan du prøve se om det er helt hul i hovedet :)
PS: serveren står i mexico, derfor det er MX tid :)


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="refresh" content="420" >
<title>auto update page</title>

</head>

<body>
<?php
date_default_timezone_set('America/Mexico_City');   
?>
  <?= 'Last update: ' .date('H:i:s').' MX TIME<br> Update automatic every 420 sec. <br> And do not close this page. need to be running 24/7<br>'; ?>

1. Is user = admin =
<?php

include('sql_con/conn.php');
include('include/login/check_login.php');
if($_SESSION['level'] != '1') {
echo 'NO ACCESS';
die();
} else {
    echo 'YES ISSET, KEEP ON<br><br>';
    }

$ftp_server = "xxx.xxx.xxx.xxx";
$ftp_username = 'username';
$ftp_userpass = 'password';


include "ftp/ftp.class.php";
    $ftp = new SimpleFTP("xxx.xxx.xxx.xxx", "username", "passwrod");
    if($ftp->connect()) {
   
   
$ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass);

// get file list of current directory

$show_footer = $mysqli->query("SELECT * FROM users WHERE active = '1' AND folder_name != ''");

        while($show_foot = $show_footer->fetch_object())
                {
            $folder_name = $show_foot->folder_name;
            $user_id = $show_foot->id;
           
                   
$file_list = ftp_nlist($ftp_conn, $folder_name);

foreach ($file_list as $file_lists) {
   
$file_list_1 = ftp_nlist($ftp_conn, $file_lists);
foreach ($file_list_1 as $file_lists_1) {


$new_str1 = substr($file_lists_1, ($pos = strpos($file_lists_1, '/')) !== false ? $pos + 1 : 0);

$url2 = $file_lists_1;
$file_list_2 = ftp_nlist($ftp_conn, $url2);

foreach ($file_list_2 as $file_lists_2) {


$new_str2 = substr($file_lists_2, ($pos = strpos($file_lists_2, '/')) !== false ? $pos + 1 : 0);

mkdir('account/include/users/'.$user_id.'/'.$new_str2, 0755, true);

$url3 = $file_lists_2;
$file_list_3 = ftp_nlist($ftp_conn, $url3);
foreach ($file_list_3 as $file_lists_3) {


$new_str3 = substr($file_lists_3, ($pos = strpos($file_lists_3, '/')) !== false ? $pos + 1 : 0);

$show_file_name = substr($file_lists_3, strrpos($file_lists_3, '/') + 1);



$lastchanged = ftp_mdtm($ftp_conn, $file_lists_3);
if ($lastchanged != -1)
  {
  $create_year = date("Y",$lastchanged);
  $create_monthe = date("F",$lastchanged);
  $create_day = date("d",$lastchanged);
  }
else
  {
  echo "Could not get last modified";
  }
 
  mkdir('account/include/users/'.$user_id.'/'.$new_str2.'/'.$create_year.'/'.$create_monthe.'/'.$create_day, 0755, true);

 
//echo 'create: '.$create_day.' '. $create_monthe. ' '. $create_year.' ' . $show_file_name.'<br>';

$filename_new = 'account/include/users/'.$user_id.'/'.$new_str2.'/'.$create_year.'/'.$create_monthe.'/'.$create_day.'/'.$show_file_name;
$files = $file_lists_3;
if (!file_exists($filename_new)) {

       
        if($files == '.DS_Store')
        { echo 'test';
        }else {
       
        if($ftp->get($files, $filename_new,FTP_BINARY)) {

          print $files." Moved to website<br>";
      } else {
            print "<br />Failed to move: " . $ftp->error;
      }     
      }  }
}




}
}}}}

?>
<div align="center"><font color="#FF0000">DO NOT CLOSE THIS PAGE</font></div>
Avatar billede jakobdo Ekspert
29. november 2016 - 13:55 #3
Ville det være muligt at køre den opgave som et cronjob ?
Dog uden alt det der html output?

Og hvis det virker, er det så ikke godt nok? :)
Avatar billede frexxit Juniormester
02. december 2016 - 10:31 #4
hej, jo det virker som cron, og kører også sådan nu. smid bare et svar, så kan vi få den lukket :)
Avatar billede jakobdo Ekspert
02. december 2016 - 10:55 #5
Man smider ikke svar længere.
Du kan markere alt som en løsning nu.
Avatar billede frexxit Juniormester
02. december 2016 - 11:34 #6
Så kan man se det er længe siden man har været herinde. Hehe. Men tak for hjælpen ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester