Autor Zpráva
gardener
Profil
Zdravím,
mám skript pro import dat z CSV, na localhostu funguje vše o.k ale pokud se snažím to rozjet na serveru, dostanu hlášku:
Access denied for user 'moje_uz_jmeno'@'%' (using password: YES)
myslel jsem, že by to třeba ,ohl mít na svědomí dbčonnect příkaz, v případě, že bych se předtím již k db připojil a připojení neukončil, ale to se nepotvrdilo, pokud by někdu tušil, čím by to mohlo být způsobeno, budu rád za každou radu.

PS:pokud mám například insert do db z formuláře, tak to funguje v pořádku.

Kód:
<?php
if(($_SESSION['prihlasen'] != 1) && ($_SESSION['je_admin'] != 1))
{
die ("Nemate nastavena opravneni k pristupu");
}
if(isset($_POST["submit_import"]))
{
$soubor_nazev =$_FILES['data']['name'];
 if ($_FILES["data"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br />";
  }
  if ($_FILES['data']['size']/1024 > 50) die ("Soubor je příliš velký");
  $koncovka=end(explode(".",$soubor_nazev));
  if ($koncovka != "csv") 
  {
  die("Je mozne nahravat pouze so ubory s priponou csv");
  }
  if (move_uploaded_file($_FILES['data']['tmp_name'],$soubor_nazev))
  {
    include_once ("../db_connect.php");
    $smazat_tabulku = mysql_query("TRUNCATE TABLE products");
    	if (!$smazat_tabulku) 
	{
		die("Přepsání tabulky se nezdařilo, zkontrolujte prosím validitu formátu vstupních dat");
	}  
    $soubor = mysql_real_escape_string(dirname(__FILE__) . '\\' . $soubor_nazev);
    //echo($soubor); Is here because i needed known absolute path for imported file
      $vlozeni = mysql_unbuffered_query ("LOAD DATA INFILE '".$soubor."' INTO TABLE products
	FIELDS TERMINATED BY ';'
    LINES TERMINATED BY '\r\n'
	(name,medic_form,size_pack,stock_price,orc_price,vzp_price) 
	;")OR die(mysql_error()); 
	}
	//LINES TERMINATED BY JE NASTAVENI PROTO ABYCHOM MOHLI DEFINOVAT PODLE CEHO
	// ROZDELOVAT POLE DO SLOUPCU, tzn, v tomto pripade je to carka ','
	if (!$vlozeni) 
	{
		//mysql_error($vlozeni);
		echo mysql_error();
		die("Vlozeni se nepodařilo, zkontrolujte prosím validitu formátu vstupních dat");
		
	}  
	else
	{
		echo("<span class=\"notice\">Import dat proběhl v pořádku\n\r</span>");
	}
}

?>


<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="post" enctype="multipart/form-data">
  <fieldset>
  <legend>Nahrát do databáze nový seznam(MAX.1 Mb)</legend>
  <label for="">Upozornění: tato akce přepíše data v databázi přípravků, doporučujeme data před touto akcí zálohovat.</label>
  <br />
  <label for="soubor">Vybrat soubor CSV()</label>
  <br />
  <input name="data" id="soubor" type="file" class="textinput" title="Proveďte výběr souboru ve formátu CSV, který bude importován do DB" />
  <br />
  <br />
  <input type="submit"  name="submit_import" value="nahraj" />
  </fieldset>
</form>
tiso
Profil
Ako vyzerá súbor db_connect.php?
TomášK
Profil
Pravděpodobně máš špatně přihlašovací údaje k databázi nebo server, ke kterému se připojuješ.
MrVain
Profil
[#3]
Nie! :D

Nemas File Access. Napis im to na podporu a mali by vediet. ;) Ak mas jeden z tych lacnych hostingov tak urcite.

mail@dxin.org
gardener
Profil
Take bych se priklanel k file access, nebot pokud se to netyka souboru, tak vse pracuje o.k, jenom u importu ze souboru to nejde..

Ale nicmene db_connect je takto:
<?php

if ($_SERVER["SERVER_ADDR"]=="127.0.0.1")
{
define("SQL_HOST","localhost");
define("SQL_DBNAME","cio");
define("SQL_USERNAME","root");
define("SQL_PASSWORD","");
}
else
{
define("SQL_HOST","00.00.49.81");
define("SQL_DBNAME","cz");
define("SQL_USERNAME","cz");
define("SQL_PASSWORD","h9");
}
//Define parameters for localhost and testing server

$id_spojeni = mysql_pconnect(SQL_HOST, SQL_USERNAME, SQL_PASSWORD);
//command for db connect with three parameters server,user,password
if (!$id_spojeni){
die('Spojení s Mysql DB se nezdaoilo.');
}
//if verify id for connect failed(return false)will be written error message
$vysledek_vybrani = mysql_select_db(SQL_DBNAME,$id_spojeni);
if (!$vysledek_vybrani){
die('Databázi  se nepodaoilo vybrat.');
}
$set = mysql_query ('SET CHARACTER SET utf8');
if (!$set){
die('Nepodařilo se nastavit kódování databáze.');
}
require_once("db_create.php");
require_once("db_products_create.php");
//It same,if verify id for connect failed(return false)will be written error message
?>
AM_
Profil
Access denied for user 'moje_uz_jmeno'@'%' (using password: YES)
tuhle chybu mysql vyhazuje při špatných zadaných přihlašovacích údajích. S právy k souborům to nemá nic společného (viděl jsem už různé divné věci, ale s timhle jsem si dost jistý)

//P.S. zkus se se stejnými údaji přihlásit přes myadmina.
gardener
Profil
Praveze udaje jsou o.k, jelikoz db vyuzivam i k prihlaseni..mozna na IP napevno tomu vadi..jinak take me to poradne zaskocilo..
AM_
Profil
mozna na IP napevno tomu vadi..
jo, to je možné, mnohem spíš než nějaká práva k souborům :) nezbývá než kontaktovat správce databáze.
gardener
Profil
Dost mozna, je to tim, ze nemam pristupova prava do adresare, kde je docasne nahran soubor, nez je zkopirovan na misto urceni a proveden z nej LOAD DTA INFILE...
TomášK
Profil
AM_
Původně jsem taky myslel, že tahle hláška je jen při přihlašování do databáze. MrVain mě opravil, zkusil jsem to hodit do googlu a souhlasím s ním - nemá právo pro přistuopvat k souborům - viz http://dev.mysql.com/doc/refman/5.1/en/privileges-provided.html#priv_file
gardener
Profil
Jasny, jsem rad, ze jsme se shodli, jenze co se s tim da delat? Mohu to nejak obejit?
gardener
Profil
Zdravim
Mám problem s opravnenimi na hostingu, pomoci formu nactu soubor, ten uploaduju a pomoci move_uploaded_file chci presunout a pote ho nacist do DB pomoci LOAD DATA INFILE.
Jenze problem je v tom, ze v docasnem adresari, kde se ten soubor ulozi, pred tim nez je presunut ja nemam prava pro prisup, no a tim padem my skript vyhodi chybu:
Access denied for user 'uzivatelcz'@'%' (using password: YES)

a nebo pokud se soubor csv, nejmenuje stejne jako soubor, ktery se ma prepsat a pote nacist, tak dostanu hlasku:
Warning: move_uploaded_file(export.csv) [function.move-uploaded-file]: failed to open stream: Permission denied in /data/web/virtuals/web/admin/nahraj_seznam.php on line 19

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpPeywfq' to 'export.csv' in /data/web/virtuals/web/admin/nahraj_seznam.php on line 19


Nesetkal se s tim nekdo prosim? Protoze psat na podporu jstli by mi do toho adresare mohli zmenit CHMOD, je asi utopie:)..

Kod:
if(isset($_POST["submit_import"]))
{
$soubor_nazev =$_FILES['data']['name'];
 if ($_FILES["data"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br />";
  }
  if ($_FILES['data']['size']/1024 > 50) die ("Soubor je příliš velký");
  $koncovka=end(explode(".",$soubor_nazev));
  if ($koncovka != "csv") 
  {
  die("Je mozne nahravat pouze so ubory s priponou csv");
  }
  if (move_uploaded_file($_FILES['data']['tmp_name'],$soubor_nazev))
  {
    include_once ("../db_connect.php");
    $smazat_tabulku = mysql_query("TRUNCATE TABLE products");
    	if (!$smazat_tabulku) 
	{
		die("Přepsání tabulky se nezdařilo, zkontrolujte prosím validitu formátu vstupních dat");
	}  
    $soubor = mysql_real_escape_string(dirname(__FILE__) . '\\' . $soubor_nazev);
    //echo($soubor); Is here because i needed known absolute path for imported file
      $vlozeni = mysql_unbuffered_query ("LOAD DATA INFILE '".$soubor."' INTO TABLE products
	FIELDS TERMINATED BY ';'
    LINES TERMINATED BY '\r\n'
	(name,medic_form,size_pack,stock_price,orc_price,vzp_price) 
	;")OR die(mysql_error()); 
	}
	//LINES TERMINATED BY JE NASTAVENI PROTO ABYCHOM MOHLI DEFINOVAT PODLE CEHO
	// ROZDELOVAT POLE DO SLOUPCU, tzn, v tomto pripade je to carka ','
	if (!$vlozeni) 
	{
		//mysql_error($vlozeni);
		echo mysql_error();
		die("Vlozeni se nepodařilo, zkontrolujte prosím validitu formátu vstupních dat");
		
	}  
	else
	{
		echo("<span class=\"notice\">Import dat proběhl v pořádku\n\r</span>");
	}
gardener
Profil
Nikdo v patek vecer nema cas?:]
V postate asi tusim kde by se mohla chyba vyskytovat, ale potreboval bych k ni "nakopnout", file se presune, tam kam ma, to je fajn, takze ted by se asi slusilo nastavit absolutni cestu k souboru na LOAD DATA IN FILE, jenze uz nevim jak aby to chodilo na hostingu..

Nebo jsem mimo a je chyba jinde?
fajzen
Profil
Access denied for user 'uzivatelcz'@'%' (using password: YES)
toto je chyba spojenia s databázou, nie prístupu k súborom

do dočasného adresára, kam sa ukladajú odoslané súbory, prístup určite máš.
Skôr musíš zmeniť CHMOD cieľového adresára
TomášK
Profil
Můžeš požádat správce databáze, aby ti přístup přidělil. Druhá možnost, která nevím, jestli půjde je
klíčové slovo LOCAL - něco jako LOAD DATA LOCAL INFILE (přesná syntaxe bude v dokumentaci,
nepamatuju si ji), která ti umožní nahrát soubor z tvého počítače - pokud to potřebuješ na
jednorázové importy.
AM_
Profil
řešíš to tu už v jednom tématu, tak proč zakládáš nové? dotaz formuluješ jinak, ale mám pocit, že se jedná o stejný problém - access denied

Moderátor Chamurappi: Sloučeno.
gardener
Profil
Zdravim,
Uz treti den resim vsemi moznymi zpusoby jeden drobny problem, ale at delam co delam, nemohu se dopracovat k reseni, proto bych chtel poprosit nekoho zkuseneho o radu.

Popis>
Nahravam pomoci LOAD DATA INFILE do DB> na LH vse o.k, na serveru se ale nasledujici problem:

Vypise se hlaska:
/data/web/virtuals/_/wwwAccess denied for user 'uz_jmeno'@'%' (using password: YES)

Prihlasovaci udaje do DB mam korektni, s jinymi skripty ktere pracuji s DB funguje bez problemu.

Z hostingu mi napsali, ze mam zkusit pouzit "localhost" namisto "%" ale ja nikde "%" nepouzivam,
pouzivam klasicky "linux15.ignum.cz"
.

Zkusil jsem tedy dosadit primo absolutni cestu na serveru pro LOAD DATA INFILE, natrefil jsem ale na dvě rozdílné hodnoty:
první:getcwd() vraci >/data/web/virtuals/nejakyweb.cz/www/nejakasubdomena-alfa/admin/uploads/

druhy:$_SERVER['DOCUMENT_ROOT']; vraci>/data/web/virtuals/_/www


Ani jedna z nich ale nefunguje pokud ji dosadim jako absolutni cestu k souboru plus jeho nazev.

Uz proste nevim co dal, soubor zkopiruji tam kam mam, a chci ho jenom nacist do SQL, je to vcelku banalita ale takovy problem jsem s tim vazne necekal, pokud by nekdo vedel, budu oc vdecny za kazdou radu.

PS>LOAD DATA LOCAL INFILE jsem zkousel, ale neni povolen
tiso
Profil
gardener - mal si pokračovať v pôvodnom vlákne. Jedno upozornenie nestačilo?

Moderátor Chamurappi: Všechno sloučeno. Bez jakéhokoliv pročištění. Jestli to někdo z kolegů chce pročistit, může.
gardener
Profil
Jiste, ale uz bylo celkem stare a nevic asi se to tyka jenom MySQL..takze zde je lepsi to resit..
tiso
Profil
gardener - to sú nezmyselné argumenty
1. odpoveď vyťahuje vlákno hore.
2. čo ak riešenie je možné spraviť v PHP?
gardener
Profil
Tak se mi povedlo jeste omylem to tema zamcit..psal jsem tam toto:
LOAD DATA LOCAL INFILE neni povolen, localhost take nefynguje jak mi poradili z hostingu.
Zkoousel jsem nevytvaren perzistentni pripojeni a pouzil jen mysql_query misto unbufered_query ale stale nic. A pritom veskere ostatni skripty funguji ok(vyuzivaji ten samy skript pro pripojeni)..
TomášK
Profil
Technické:
* zakládat nové téma asi bylo zbytečné
* založit téma s názvem nevysvětlitelný problém je rovněž zbytečné, neb nelze očekávat, že ti
podstatu problému někdo vysvětlí, vzhledem k jeho nevysvětlitelnosti :)

K dotazu:
* % je zástupný znak pro jméno serveru
* můžeš mít různá práva, pokud tam zadáš jméno serveru přímo 'linux15.ignum.cz' nebo pokud tam zadáš 'localhost'.
* perzistentní nebo ne, je úplně jedno - jde o práva nastavená v databázi a nezáleží na tom, jak se připojíš
* je úplně jedno, jakou tomu dáš cestu, jestli k souboru máš práva nebo ne. On se ten soubor ani nepokouší najít - zjistí, že nemáš právo otevírat soubory, tak tě utne. Až postoupíme o krok dál a on se bude pokoušet číst ten soubor, bude to důležité. Teď ne.
* co znamená LOAD DATA LOCAL není povolen? dej sem chybovou hlášku. Možná by stačilo spouštět myslq s parametrem --local-infile. Jak toho docílit v php nevím, ale pokud máš povolen vzdálený přístup, pak by to mohlo jít.
* napiš sem výstupy dotazů, spuštěné s přihlášením jako localhost a spuštěné s přihlášením jako 'linux15.ignum.cz'
show variables like 'local%';
    SHOW GRANTS;
gardener
Profil
Tak
u IP:192.168.1.81 hlaska=Access denied for user 'nejakyweb.cz'@'%' (using password: YES)
u 217.31.49.81 hlaska=Access denied for user 'nejakyweb.cz'@'%' (using password: YES)
u "localhost" hlaska=Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in /data/web/virtuals/domena.cz/www/subdomena-alfa/db_connect.php on line 19

* co znamená LOAD DATA LOCAL není povolen?: to znamená hlášku ve smyslu This MySQL function isn't allowed....

kdyz jsem zkusil zadat SHOW GRANTS pro IP 192.168.1.81 dostal jsem:
GRANT USAGE ON *.* TO 'nejakyweb.cz'@'%' IDENTIFIED BY PASSWORD '7c5108237c6f473e'
GRANT ALL PRIVILEGES ON `nejakyweb.cz`.* TO 'nejakyweb.cz'@'%'

a pro SHOW VARIABLES LIKE 'local%';

local_infile OFF
gardener
Profil
Tak jsem to nevydrzel a smiril jsem se s tim, ze na Ignum asi s touto fci nepochodim..
Udelal jsem to tedy prasacky pomoci fgetcsv,while a insert into, kazdopadne to funguje jak ma a na prvni pokus..

Diky vsem za rady.
TomášK
Profil
Tohle podle mě znamená, že v současném stavu LOAD DATA nedokážeš použít - ani s LOCAL, ani bez.
* pro LOCAL bys potřeboval MySQL server spuštěný s --local-infile=0, možné hrozby jsou na http://dev.mysql.com/doc/refman/5.1/en/load-data-local.html
* pro LOAD DATA bez LOCAL bys potřeboval mít přístup k souborům - viz http://dev.mysql.com/doc/refman/5.1/en/privileges-provided.html#priv_file

Pro obojí bys potřeboval spolupráci ze strany hostingu a vzhledem k tomu, co se píše v tom prvním článku, bych nečekal, že ti to umožní - zvlášť je-li to freeserver. Pokud by někdo mohl potvrdit mé teorie, nebude to naškodu .

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: