Autor Zpráva
peta
Profil
Potreboval bych se pripojit na Oracle databazi.
Pustim si Wamp server na localhost a zjistit, ze nema aktivni knihovnu oci8 a oracle. Oboje jsem activoval, restartoval Wamp.
Kdyz napisi ora_logon(); tak je to ok, ale kdyz zkusim cokoliv oci_...() , napises neznama funkce.
Co delam spatne?

Dobra, rekl jsem si, kdyz jedou ora prikazy, zkusim ora prikazy.
Jenze se mi nepodarilo ani jen pripojit.

Warning: ora_logon() [function.ora-logon]: Oracle: Connection Failed: ORA-12222: TNS:neexistuje takový protokolový adaptér in C:\wamp\www\stag-php\stag_php.php on line 137
Could not connect to Oracle database!

Prikaz vypada asi nejak takto:

$db ="(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = xxxxxx.xxx.cz)
(PORT = 152y)
)
(CONNECT_DATA = (SID = zzzzz))
)";

$argHostname = 'xxxxxx.xxx.cz';
$argDatabasename = 'zzzzz';
$argUsername = 'useraaa';
$argPassword = 'pswbbb';
putenv('ORACLE_HOME='.$argHostname);
putenv('ORACLE_SID='.$argDatabasename);
$db_conn = ora_logon($argUsername.'@'.$db,$argPassword) or die( "Could not connect to Oracle database!");

Oracle server je umisten na jinem stroji. Je mozne, ze bych se pres localhost na nej nedostal?
Prikaz pro DB je urcite spravny, mam to zkopirovane primo z TNSNAMES.ORA . Uzivatel by mel byt spravny i s heslem.
Nicmene jsem zkusil i alias nebo jmeno serveru misto $db a nechytacka.
--- TNSNAMES.ORA ----
alias.xxx.cz =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxxxxx.xxx.cz)(PORT = 152y))
(CONNECT_DATA =
(SID = zzzzz)
)
)
Nasel jsem spoustu literatury mimo cz.php.net , kde to proste neni, jen oci. A oci mi nejede.

Co delam spatne?
Uz jsem z toho celkem zoufaly. Jeden znamy mi rikal, ze mu to pres oci_ fungovalo ale zrovna je nedostupny, takze se nedozvim, jak oci zprovoznil.
Měsíček
Profil
1.) Chyba může být ve verzi souboru php_oci8.dll, nebo ji máš na špatném místě.
2.) Jede ti Oracle server? (a máš Oracle klienta? :))
3.) Také popřemýšlet o ODBC.

atd ..
peta
Profil
Měsíček
2 - Oracle klienta nemam. Ten snad ani neni potreba, ne? Ten je prave na serveru venku.

1 - php_oci8.dll , nezkousel jsem hledat jinou verzi. Spoleham na to, ze Wamp to ma dobre a kdyz to nabizi pres tlacitko v php - extension i s oracle.php , tak je to ok.

3 - odbc mne take napadlo, nasel jsem si knihovnu, kterou snad pouziva
http://typo3.org/fileadmin/typo3api-4.0.0/dc/d29/adodb-oracle_8inc_8ph p-source.html
To pripojeni je tam pro ora_logon() stejne. Resp, v jedne verzi jsem to okopiroval z toho.
Odbc jako takove budu resit jako posledni moznost, mozna jeste PDA jsem kdesi videl.

Mne ora_logon() jako funkce funguje. Kdyz tam napisi hosta, tak se to tvari, jako by to s nim komunikovalo.
xxxxxx.xxx.cz
Cili se domnivam, ze zadneho klienta to dal nepotrebuje. Klienta bych v podstate delal ja.
Jo, pokud bych to chtel smerovat na localhost, pak jsem v navodech vycetl, ze instaluji klienta a ze si ho mam stahnout primo z oracle pro novejsi verzi.
nexus
Profil
Oracle server je umisten na jinem stroji. Je mozne, ze bych se pres localhost na nej nedostal?
Jsem jen student, ale nezda se mi tahle veta.
localhost je adresa 127.0.0.1, bo jak presne, a kdyz je venku, tak nemuze mit adresu localhostu, ne?
peta
Profil
nexus
Mas localhost a vytvoris FTP propojeni s jinym PC, tak to funguje a s databazemi by to neslo? Staci, kdyz na tom cizim PC bude SQL / Oracle client. Coz pocitam, ze tam je, kdyz tam jiny program s tou databazi pracuje, ale k nemu ja nemam pristup ke kodu.
Ale je mozne, ze se mylim. A budu zvazovat i nad instalaci Oracle klienta jako dalsi moznost.
nexus
Profil
peta nejspis si nerozumime...
localhost je ip adresa tveho pocitace a ta se nemeni i kdyz pouzijes jakekoli spojeni nekam ven.
Je dost mozne, ze se pletu, ale opravdu se mi to nezda, nastavit adresu na spojeni na localhost a pripojit se pres ftp na pc, kde bezi klient a doufat, ze se spojis. I kdyby se tak stalo, je to neprakticke a nespolehlive.

Příklad: Chci se pripojit na mysql db, nastavim adresu na localhost, mam nainstalovany interpret phpka a pripojim se nejakym protokolem k nekomu jinemu, kde bezi mysql.
Otazka: Pripojim se? Ne.

(ted me tak napadlo, mozna by ses dokazal pripojit pres localhost po uprave HOSTS ve woknech...)
P_T_
Profil
Pokud server oracle a PHP ( služba ) běží na jednom stroji, můžeš použít localhost.
Pokud jsou to dva rozdílný stroje ( a není to úmyslně nastavený ) NEMŮŽEŠ použít localhost, ale IP adresu serveru, nebo DNS název.
Tam kde běží PHP ( služba ) musí být i klient Oracle ( v jakýkoliv podobě ).
Localhost je jako by DNS záznam pro IP 127.0.0.1 ( v drtivé většině ).

Jinak nexus to píše dobře.
peta
Profil
P_T_
To jsem napsal uz v prvnim prispevku, ze mam adresu
$argHostname = 'xxxxxx.xxx.cz';
Ja mam jenom to me PHP nahrane na lokalnim PC.
Problem jsem nevyresil. Stale. Mozna bych si rad precetl reseni, jestli si vzpomenu.

Ale mam to jinak.
Na jinem serveru je v PHP nainstalovane OCI a je tam zrejme i oracle client. Kolega uz zkousel, zrejme neco podobne se stejnou databazi a z nejakeho zahadneho duvodu mu tam to oci bezi. Tez je to ale linux.
Tak ze mi tam cely program bezi uplne v pohode.
Vypada to asi takto:

<?php

@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on");
error_reporting(E_ALL);
session_start();


// --- config ---
$CFG_file = "oci_tablex.php"; //this file name
$CFG_SQLhost = "xxxxxx.yyy.zz"; //Oracle server (host)
$CFG_SQLuser = "ghi"; //Oracle user
$CFG_SQLpsw = "def"; //Oracle password
$CFG_SQLdbname = "abc"; //Oracle DB name

$db ="(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = xxxxxx.yyy.zz)
(PORT = aaaa)
)
(CONNECT_DATA = (SID = abc))
)";

$db_conn = ocilogon($CFG_SQLuser,$CFG_SQLpsw,$db) or die("Err: ".oci_error());


function fce_show_tables_oci($tab)
{
global $db_conn;
$t = '';
$query = "select * from ALL_ALL_TABLES";
$stmt = oci_parse($db_conn, $query);
$exec = oci_execute($stmt);
if (!$exec) {$err = oci_error($stmt); echo $err['message'];}
$i=0;

$h = '';
$b = '';
$res = oci_fetch_array($stmt);
$h.= "\n".'<tr>';
$b.= "\n".'<tr>';
foreach($res as $key=>$value)
{
if (!is_int($key))
{
$h.= '<th>'.$key.'</th>';
$b.= '<td>'.$value.'</td>';
}
}
$h.= '</tr>';
$b.= '</tr>';
$i++;

while ($res = oci_fetch_array($stmt))
{
$b.= "\n".'<tr>';
foreach($res as $key=>$value)
if (!is_int($key))
{
{$b.= '<td>'.$value.'</td>';}
}
$b.= '</tr>';
$i++;
if ($i===20) {break;}
}

$t = '<table border=1><caption>'.$tab.'</caption><thead>'.$h.'</thead><tbody>'.$b.' </tbody></table>';
$t.= '<p>'.$i.' radku</p>';

oci_free_statement($stmt);
return $t;
}



//login
if (isset($_GET['logout'])) {session_unset();}
$a = 'user_name'; $_SESSION[$a] = isset($_POST[$a]) ? $_POST[$a] : (isset($_SESSION[$a]) ? $_SESSION[$a] : '');
$a = 'user_psw'; $_SESSION[$a] = isset($_POST[$a]) ? $_POST[$a] : (isset($_SESSION[$a]) ? $_SESSION[$a] : '');
$login = ($_SESSION['user_name']==='JMENO' && $_SESSION['user_psw']==='HESLO') ? true : false;

$tab = isset($_GET['tab']) ? $_GET['tab'] : '';
$tabulky = "";
if ($login)
{
if ($tab!='')
{$tabulky = fce_show_tables_oci($tab);}
}
else
{
$tabulky = "Nejste prihlasen!";
}

oci_close($db_conn);

//phpinfo();
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"/>
<title>pripojeni na oracle pomoci OCI</title>
<meta name="robots" content="none"/>
<style type="text/css">
body {font-family:Arial; font-size:95%; background:#fdfdfa;}
</style>

</head>

<body>

<form action="<?php echo $CFG_file; ?>" method="post"<?php echo ($login?' style="display:none;"':''); ?>>
<table>
<tr>
<th><label>Jmeno</label></th>
<th><label>Heslo</label></th>
<th><br/><th>
</tr>
<tr>
<td><input type="text" name="user_name" value=""/></td>
<td><input type="password" name="user_psw" value=""/></td>
<td><input type="submit" value="Prihlasit"/><td>
</tr>
</table>
</form>

<p<?php echo ((!$login)?' style="display:none;"':''); ?>>Uzivatel: <b><?php echo $_SESSION['user_name']; ?></b>, <a href="<?php echo $CFG_file; ?>?logout=1">Odhlasit</a></p>

<?php echo $tabulky; ?>

</body>
</html>
zemiak
Profil *
Oracle client skratka musi byt na stroji, z ktoreho sa pripajas, na tom nie je nic zahadne

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: