Autor Zpráva
Fisak
Profil
Dobrý den, momentálně řeším automatické aktualizace svého CMS systému. Chtěl bych vědět jestli lze nějakým způsobem stáhnout soubory z jiných adres a umístit/nahradit je na mém hostingu. Například mám na mém hostingu složku se soubory /system/ a soubory config.php, core.php, function.main.php a na adresa.cz/update/system/ mám ty samé soubory. Dokázal by mi někdo poradit jak je stáhnout systémově a nahradit je za ty co mám na svém hostignu popř. je jen přidat? Jestli je to vůbec možné. Předem děkuji za všechny odpovědi.
abc
Profil
<?php
$files = array('config.php', 'core.php', 'function.main.php');
$dlUrl = 'adresa.cz/update/system/';
$saveUrl = '/system/';

foreach ($files as $file){
 file_put_contents($saveUrl . $file, file_get_contents($dlUrl . $file)); 
}

Doplnění:
Pokud by nefungovalo file_get_contents, tak lze použít např. cURL

Doplnění 2:
Pokud je třeba zachovat atomicitu, tak stažené soubory nejprve uložit jako např. config.php.tmp a po úplném uložení do souboru, tak smazat původní a přejmenovat .tmp na spravné
Fisak
Profil
No... bohužel to nejde. A s cURL nevím jak by to mělo vypadat.


Na vaše doporučení to nejdříve zkouším s příponou .tmp abych zjistil jestli se to uloží dobře atd. A místo:
<?php
//nacteni db
require_once BASE . ("/system/config.php");

require_once BASE . ("/system/class/class.db.php");


DB::connect(array(
    'driver'   => _DB_TYPE_,
    'host'     => _DB_SERVER_,
    'username' => _DB_USER_,
    'password' => _DB_PASSWD_,
    'database' => _DB_NAME_,
    'charset'  => _DB_CHARSET_,
));

//prefix
DB::getSubstitutes()->pref = _DB_PREFIX_;
se mi uložilo:
<br />
<b>Warning</b>: require_once(BASE/system/config.php) [<a href='function.require-once'>function.require-once</a>]: failed to open stream: No such file or directory in <b>/data/web/virtuals/30303/virtual/www/subdom/insignia/update/syst_file/system/config-db.php</b> on line <b>3</b><br />
<br />
<b>Fatal error</b>: require_once() [<a href='function.require'>function.require</a>]: Failed opening required 'BASE/system/config.php' (include_path='.:/data/web/virtuals/30303/virtual') in <b>/data/web/virtuals/30303/virtual/www/subdom/insignia/update/syst_file/system/config-db.php</b> on line <b>3</b><br />
abc
Profil
Fisak:
No... bohužel to nejde. A s cURL nevím jak by to mělo vypadat.
Buď lze čerpat z manuálu - curl nebo zde na diskusi stačí hledat file_get_contents a curl a mě to našlo krásných 179 výsledků a předpokládám, že tak ve více než 100 z nich bude správné řešení.

Jak to ukládáš?
Fisak
Profil
Už jsem to zprovoznil ale bohužel soubory s názvem "nejakysoubor.php.ins" to bere jako php soubory a tudíž se mi zkopíruje pouze prázdný soubor. Když udělám to že soubor pojmenuji "nejakysoubor--php.ins" a pak nahradím --php za .php a .ins odstraním tak to funguje normálně.. ale bohužel to se mi zdá jako nešťastné řešení.. jinak:
function get_file_version() {
    
  $content = file_get_contents('http://adresa.cz/update/syst_file.ins');
  $echo_database = preg_replace('#[^0-9\a-z\-\_\;\/\.]#ui', '', $content);
  return $echo_database;
    
    
}
$files = explode(";", get_file_version());
        $dlUrl = 'http://adresa.cz/update/syst_file/';
 
        foreach ($files as $file){ 
        $file = trim($file);
        if($file != "") {
        $file_exp = explode(".ins", $file);
        $file_next = Str_Replace("--", ".", $file_exp[0]);
          file_put_contents($file_next, file_get_contents($dlUrl . $file)); 
        }
        }
syst_file.ins:
system/config-db--php.ins;
system/config-function--php.ins;
system/config-plugins--php.ins;
system/core--php.ins;
system/opconfg--php.ins;
abc
Profil
ale bohužel to se mi zdá jako nešťastné řešení
Proč? Vždyť je to jedno, jak se jmenují pomocné soubory... Důležitý je výsledek.
Klidně si je pojmenujte všechny config-db.ins a pak jen .ins -> .php
Fisak
Profil
Jedno to je ale pokud mám takhle upravit 100 souborů tak je to pro mě o dost složitější upravovat všude --php.ins než jen přidat .ins a to --php.ins nebo .php.ins tam musí bejt aby skript věděl jaký je to typ souboru.. .php nebo .html nebo .js atd...
abc
Profil
Jedno to je ale pokud mám takhle upravit 100 souborů
Tak to nedělej ručně?
Už to umíš přejmenovat z .php.ins na .php, tak snad není problém udělat si skript, který soubory přejmenuje z .php na .php.ins
Medvídek
Profil
Fisak:
A není lepší si udělat nějaký balíčkovací systém a hodit to do zipu? Zip stáhnete, v php rozbalíte a nakopírujete.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: