Newsgroup: it.comp.www.php
Titolo: MSSQL 2000 + PHP + APACHE : help!

Salve a tutti. C'e' per caso un'anima tanto pia da aiutarmi ad accedere
ad un database MSSQL 2000 su macchina Win2000 da Linux RH 7.2 con Apache
e php 4.06 e freetds0.52?
Mi sono letto tantissimi help (su 
www.php.net
 e phpbuilder) ed ho provato
svariate volte, senza successo.
E' necessario compilare Apache statico o dinamico?
Grazie a tutti.
Maurizio

 wrote in 
news:ScNO7.229922$
sq5.11...@news.infostrada.it
:

per vedere MSSQL da linux con le funzioni mssql_* , hai bisogno delle 
librerie SYBASE-CLIENT installate....
(come per Oracle ci vanno le librerie Oracle, per mssql ci ANDREBBERO 
quelle mssql ma sotto linux non ci sono. per compatibilità storica quelle 
di sybase vanno bene ugualmente)
ciao

Le librerie per connettersi a MSSQL 2000 sono le freetds (ultima versione).
Ho installato le freetds, poi apache & php, ma ancora non riesco ad accedere
a MSSQL 2000. Quando su Win2000 NON e' attivo MSSQL 2000, allora da linux e
con l'apache compilato come detto (freetds,php) la mssql_connect mi da'
(giustamente) errore. Ma quando e' attivo MSSQL 2000 su Win2000, allora da 
linux non mi da' alcun risultato (Netscape mi da' il messaggio "The document
contained no data. Try again later, or contact the server's administration").
Ho reinstallato MSSQL 2000, ma il risultato e' sempre quello.
Ormai sono innumerevoli le volte che ho compilato freetds,apache e php.
Qualcuno la' fuori puo', per cortesia, indicarmi i passi per accedere allo
stramaledetto MSSQL 2000, che sta su Win2000, da linux (RH 7.2)?
Molte grazie.
Mau

 wrote in
news:b3nP7.242533$
sq5.11...@news.infostrada.it
: 

passami lo script che vorresti usare...

 passami lo script che vorresti usare...
Bhe' piu' o meno:
<?
  $host    = "mssqlconnection";
  $user    = "public";
  $passwd  = "";
  $db_misc = "mio_test";
  //copiato da phpbuilder
  putenv("TDSDUMP=/tmp/freetds.log");
  putenv("SYBASE=/MAU_PROVE/BUILD/freetds");
  putenv("TDSVER=70");
  //apre la connessione
  if(!($connection = mssql_connect ($host,$user,$passwd))) {
    echo die(":::: -- Errore di connessione -- ::::<br>\n".
             "** Non riesco a connettermi all'host <b>".$host."</b>".
             " come utente <b>".$user."</b> e password <b>$passwd</b> **");
    exit();
  }
?>
Cmq, ho guardato il file di log di freetds, e sembra funzionare correttamente 
("2001-12-05 17:45:17 Connecting addr 10.0.0.101 port 1433") e poi ho guardato
il file di log degli errori di apache ("[Wed Dec  5 17:45:17 2001] [notice]
 child pid 11538 exit signal Segmentation fault (11)"). Quindi forse l'errore
e' di apache e non di freetds o php, no?
Consigli?
Molte grazie,
  Maurizio

     echo die(":::: -- Errore di connessione -- ::::<br>\n".
Ehm..., c'era un errore (ma il risultato non cambia!):
...
     echo (":::: -- Errore di connessione -- ::::<br>\n".
...
Ciao
 Mau

 e' di apache e non di freetds o php, no?
mmhh.. il php suppongo che sia compilato bene?
il freetds l'hai compilato con l'opzione di renaming delle funzioni di 
opendb? (io ho fatto cosě subito) se hai fatto cosě hai modificato i 
sorgenti del mod_sybase??
e apache l'hai ricompilato coi threads? (mi sembra che sia necessario per 
php with sybase)
non vorrei dirti cazzate.
io da linux parlo tranquillamente con mssql e non ho avuto questo tipo di 
problema.... da quando sono riuscito a startare apache!
spiacente.
ciao

 problema.... da quando sono riuscito a startare apache!
So di chiederti tanto, tuttavia non e' che saresti cosi' gentile da elencarmi
i passi che ti hanno condotto ad una connessione senza problemi? Io ho praticamente
seguito passo passo le istruzioni trovate su 
www.php.net
, nei commenti degli utenti,
alla funzione mssql_connect:
1. Con l'utima versione del freetds (0.53) faccio :
	 ./configure --prefix=/MAU_PROVE/BUILD/freetds --with-tdsver=4.2
  	 --enable-msdblib --enable-dbmfix --with-gnu-ld --enable-shared --enable-static
   poi faccio make e make install.
2. Edito il file /etc/ld.so.conf e in fondo vi aggiungo la riga:
	 /MAU_PROVE/BUILD/freetds/lib
   poi lancio ldconfig.
3. Edito, dai sorgenti di php-4.0.6, il file ext/sybase/config.m4, cambiando
   alla riga 27, "dbopen" con "tdsdbopen".
   Successivamente edito anche "configure" cambiando la riga:
  	 #define PHP_SYBASE_DBOPEN dbopen
   con:
	 #define PHP_SYBASE_DBOPEN tdsdbopen
4. Vado nella directory dei sorgenti di apache 1.3.22 e lancio:
	 ./configure
5. Ritorno nella directory di installazione di php e faccio :
	 ./configure --prefix=/MAU_PROVE/BUILD/php_build --with-mysql --enable-track-vars
	 --enable-debug --with-openssl --enable-libgcc --enable-dmalloc --with-zlib
	 --enable-bcmath --with-bz2 --enable-calendar --enable-ctype --enable-dbx
	 --enable-ftp --with-gd --with-jpeg-dir --with-tiff-dir --with-ttf --with-kerberos
	 --enable-mbstring --with-png-dir --with-qtdom --with-snmp --enable-yp
	 --with-tsrm-pthreads --with-apache=../apache_1.3.22
	 --with-mssql=/MAU_PROVE/BUILD/freetds
	 --with-sybase=/MAU_PROVE/BUILD/freetds
   poi faccio make e make install.
6. Ritorno nella directory dei sorgenti di apache e faccio:
	./configure --prefix=/MAU_PROVE/BUILD/apache_build --activate-module=src/modules/php4/libphp4.a
   poi faccio make e make install.
7. Copio, dalla directory dove ho compilato php, il file php.ini-dist in
   /MAU_PROVE/BUILD/php_build/lib/php.ini.
   Poi edito tale file e decommento e cambio cosi' la riga:
	 sybase.interface_file = "/MAU_PROVE/BUILD/freetds/interfaces"
   Poi edito il file "/MAU_PROVE/BUILD/freetds/interfaces" e vi aggiungo in fondo:
	mssqlconnection
	        query tcp tds4.2 10.0.0.101 1433
       		master tcp tds4.2 10.0.0.101 1433
   dove, ovviamente, 10.0.0.101 e' la macchina Win2000 su cui gira SQL Server.
8. Faccio uno script dove cerco di connettermi alla macchina, specificando come host,
   la label sopre scritta, ovvero "mssqlconnection".
9. Non funziona. Un processo figlio di Apache muore facendo segmentation fault (Signal 11) senza 
   dirmi perche'.
Puoi dirmi dove e se sbaglio qualcosa (e sopratutto come far funzionare il tutto)?
Ho anche pensato che magari devo attivare qualcosa su SQL Server (che so, un demone che
devo lanciare a mano mentre suppongo vada su di default).
Fatto sta che SQL server manco si accorge che qualcuno cerca di connettersi.
Ti ringrazio molto per l'attenzione.
Ciao
  Mau

Ehm.. dimenticavo:
Ho anche messo le seguenti due righe in /etc/profile:
	SYBASE=/MAUPROVE/BUILD/freetds
	LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$SYBASE/lib
e poi ovviamente
	export ... LD_LIBRARY_PATH SYBASE
inoltre, in fondo al file /MAU_PROVE/BUILD/apache_build/conf/httpd.conf
ho aggiunto la riga:
	SetEnv SYBASE /MAU_PROVE/BUILD/freetds
Ciao
  Mau

 wrote in 
news:vckR7.282399$
sq5.13...@news.infostrada.it
:
a-ah!!
nel configure di apache non devi mettere --with-mssql.
il --with-sybase che metti č sufficiente per far funzionare anche le 
funzioni mssql_*.
prova cosě.
e poi prova anche con --with-apxs anziché --with-apache
ciao

 e poi prova anche con --with-apxs anziché --with-apache
Dici che e' necessario compilare Apache dinamico?
Grazie, comunque.
 Ciao
	Maurizio

 Dici che e' necessario compilare Apache dinamico?
non saprei... io ho sempre fatto così e ha funzionato!
di sicuro ti so dire che --enable-mssql non funziona sotto linux ma ci 
vuole --with-sybase anche per mssql.
se poi non ti connetti con sybase prova a compilare tds in 7.0.
(qui una domanda: ma se volessi usare tds 5.0 per sybase e tds 7.0 per 
mssql?? non c'è modo, vero?)
di più non saprei dirti.
ciao

 già risolto.
Tah-Dah: Il bug è già stato segnalato (su Linux 2.4.5 Slackware 8.0)
ed è ancora aperto. Ecco l'URL:
 
http://bugs.php.net/bug.php?id=12250
Domandina: ho provato ad usare SYBASE (indicazioni pescate da phpbuilder
e 
php.net
), tuttavia (damned! mai che non dia errori!) php non riesce a 
compilarsi (gli mancano dei file sorgenti, mi sembra ctpublic.h). Ora,
siccome l'unico SYBASE che ho trovato è da 
linux.sybase.com
 (mi sembra)
ed è un rpm già compilato (quindi nada sorgenti). Come diavolo faccio
a far compilare php senza quei files? Ho visto che freetds ha il file
suddetto (nella dir include), ma non voglio fare un pastrocchio di 
sorgenti. Consigli?
Adesso provo un'altra versione di php
MAU

Ehm........ Chiedo umilmente scusa.
L'unico errore era la configurazione dell'utente su SQL Server.
Funziona alla grande.
Quando Apache non riesce a convalidare l'utente di SQL Server 
crasha con segmentation fault.
Ciao
 MAU

 wrote in 
news:vPHR7.288968$
sq5.14...@news.infostrada.it
:

mi è appena cascato un enorme macigno in testa...
(come nei manga, con tanto di lacrimuccia)
%-P
ciao

 ciao
Scusa ma non avevo mai messo mano su SQL Server prima (si vede che lavoro
praticamente sempre in Linux? :) ).
Grazie per il tempo speso.
Ciao
  Mau