حالا چند تا مشکل جدید دارم . من برای اتصال به MSSQL از کد زیر استفاده کردم که در xampp تحت ویندوز چک کردم و جواب گرفتم . اما زمانی که آنرا در agi اضافه کردم ، نمی دانم چرا بدون اعلام هیچ گونه خطایی ، فقط hangup رخ می دهد . کد php ام را که xampp از آن جواب گرفته ام :[LEFT][CODE]
<?php
$myServer = "192.168.0.100";
$myUser = "elastiks";
$myPass = "Aa123456";
$myDB = "s_ss8";
$conn = new COM ("ADODB.Connection"

or die("Cannot start ADO"

$connStr = "PROVIDER=SQLOLEDB;SERVER=".$myServer.";UID=".$myUser.";PWD=".$myPass.";DATABASE=".$myDB;
$conn->open($connStr); //Open the connection to the database
$query = "select COUNT(*) as [result] from V_SK_KartEshterak where TelNo = '80000007' or ShomarehKart = 3";
$rs = $conn->execute($query);
$num_columns = $rs->Fields->Count();
for ($i=0; $i < $num_columns; $i++) {
$fld[$i] = $rs->Fields($i);
}
echo "<table>";
while (!$rs->EOF) //carry on looping through while there are records
{
echo "<tr>";
for ($i=0; $i < $num_columns; $i++) {
echo "<td>" . $fld[$i]->value . "</td>";
}
echo "</tr>";
$rs->MoveNext(); //move on to the next record
}
echo "</table>";
//close the connection and recordset objects freeing up resources
$rs->Close();
$conn->Close();
$rs = null;
$conn = null;
?>
[/CODE]
[/LEFT]
این کد را در کد agi ام این چنین بازنویسی کردم :
[LEFT][CODE]
#!/usr/bin/php -q
<?php
$myServer = "192.168.0.100";
$myUser = "elastiks";
$myPass = "Aa123456";
$myDB = "s_ss8";
set_time_limit(60);
require('phpagi.php');
error_reporting(E_ALL);
$agi = new AGI();
$agi->answer();
$ccid=$agi->request[agi_callerid];
$agi->stream_file("custom/insert_code_moshtari","#"

$agi->stream_file("enter-some-digits","#"

do
{
$result = $agi->get_data('beep', 5000, 20);
$keys = $result['result'];
} while(strlen($keys) != 5);
$agi->stream_file("you-entered","#"

$agi->say_digits($keys);
$conn = new COM ("ADODB.Connection"

or die("Cannot start ADO"

$agi->stream_file("good-morning","#"

$connStr = "PROVIDER=SQLOLEDB;SERVER=".$myServer.";UID=".$myUser.";PWD=".$myPass.";DATABASE=".$myDB;
$conn->open($connStr); //Open the connection to the database
$query = "select COUNT(*) as [result] from V_SK_KartEshterak where TelNo = "+$ccid+" or ShomarehKart = "+$keys;
$rs = $conn->execute($query);
$num_columns = $rs->Fields->Count();
for ($i=0; $i < $num_columns; $i++) {
$fld[$i] = $rs->Fields($i);
}
while (!$rs->EOF) //carry on looping through while there are records
{
for ($i=0; $i < $num_columns; $i++)
{
$agi->say_digits($fld[$i]->value);
}
$rs->MoveNext(); //move on to the next record
}
//close the connection and recordset objects freeing up resources
$rs->Close();
$conn->Close();
$rs = null;
$conn = null;
$agi->stream_file("accessible-through-system","#"

$agi->hangup();
?>
[/CODE]
[/LEFT]
در کد فوق برنامه منتظر می شود تا یک عدد 5 رقمی را بگیرد سپس آنرا رقم به رقم می خواند ( تا اینجا همه چیز به درستی انجام می شود) .به محض آنکه به خط $conn = new COM ("ADODB.Connection"

لطفا نمونه ای از خروجی را ببینید :
[LEFT][CODE]
[KElastix*CLI>
[0K -- Executing [8@from-internal:1] [1;36mAnswer [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m [0m"

[KElastix*CLI>
[0K -- Executing [8@from-internal:2] [1;36mWait [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1 [0m"

[KElastix*CLI>
[0K -- Executing [8@from-internal:3] [1;36mAGI [0m(" [1;35mSIP/122-0000049e [0m", " [1;35magitest.php [0m"

-- Launched AGI Script /var/lib/asterisk/agi-bin/agitest.php
[KElastix*CLI>
[0K -- Playing 'custom/insert_code_moshtari' (escape_digits=#) (sample_offset 0)
[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'beep.gsm' (language 'en')
[KElastix*CLI>
[0K -- Playing 'you-entered' (escape_digits=#) (sample_offset 0)
[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'digits/8.gsm' (language 'en')
[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'digits/5.gsm' (language 'en')
[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'digits/6.gsm' (language 'en')
[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'digits/9.gsm' (language 'en')
[KElastix*CLI>
[0K -- <SIP/122-0000049e> Playing 'digits/8.gsm' (language 'en')
[KElastix*CLI>
[0K -- <SIP/122-0000049e>AGI Script agitest.php completed, returning 0
[KElastix*CLI>
[0K -- Executing [8@from-internal:4] [1;36mHangup [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m [0m"

[KElastix*CLI>
[0K == Spawn extension (from-internal, 8, 4) exited non-zero on 'SIP/122-0000049e'
-- Executing [h@from-internal:1] [1;36mMacro [0m(" [1;35mSIP/122-0000049e [0m", " [1;35mhangupcall [0m"

-- Executing [s@macro-hangupcall:1] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?endmixmoncheck [0m"

-- Goto (macro-hangupcall,s,9)
-- Executing [s@macro-hangupcall:9] [1;36mNoOp [0m(" [1;35mSIP/122-0000049e [0m", " [1;35mEnd of MIXMON check [0m"

[KElastix*CLI>
[0K -- Executing [s@macro-hangupcall:10] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?nomeetmemon [0m"

-- Goto (macro-hangupcall,s,15)
-- Executing [s@macro-hangupcall:15] [1;36mNoOp [0m(" [1;35mSIP/122-0000049e [0m", " [1;35mMEETME_RECORDINGFILE= [0m"

-- Executing [s@macro-hangupcall:16] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?noautomon [0m"

-- Goto (macro-hangupcall,s,18)
-- Executing [s@macro-hangupcall:18] [1;36mNoOp [0m(" [1;35mSIP/122-0000049e [0m", " [1;35mTOUCH_MONITOR_OUTPUT= [0m"

-- Executing [s@macro-hangupcall:19] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?noautomon2 [0m"

-- Goto (macro-hangupcall,s,25)
-- Executing [s@macro-hangupcall:25] [1;36mNoOp [0m(" [1;35mSIP/122-0000049e [0m", " [1;35mMONITOR_FILENAME= [0m"

-- Executing [s@macro-hangupcall:26] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?skiprg [0m"

-- Goto (macro-hangupcall,s,29)
-- Executing [s@macro-hangupcall:29] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?skipblkvm [0m"

-- Goto (macro-hangupcall,s,32)
-- Executing [s@macro-hangupcall:32] [1;36mGotoIf [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m1?theend [0m"

-- Goto (macro-hangupcall,s,34)
-- Executing [s@macro-hangupcall:34] [1;36mHangup [0m(" [1;35mSIP/122-0000049e [0m", " [1;35m [0m"

== Spawn extension (macro-hangupcall, s, 34) exited non-zero on 'SIP/122-0000049e' in macro 'hangupcall'
== Spawn extension (from-internal, h, 1) exited non-zero on 'SIP/122-0000049e'
[/CODE]
[/LEFT]
من حتی تلاش کردم که به یک وب سرویس که نوشته بودم وصل شوم کد اتصال ام این چنین است . این کد هم متاسفانه در xampp جواب می دهد اما در php درون الستیکس بدون هیچ خطایی فقط hangup می دهد . کم کم دارم به این شک می کنم که php نویسی در agi با قابلیت های بسیار بسته و مسدودتری نسبت به نوشتن php در آپاچی یک سرور وب است !!!
[LEFT][CODE]
...
$docheck = new SoapClient("http://192.168.0.104/sxserver/sxserver.dll/wsdl/ITSl_Web_SaleService"

$param2=array('__SessionId'=>$mysession,'EshterakCode'=>'3','TelNo'=>'80000096');
$checkresult = $docheck->__soapCall('CheckCrmEshterak',$param2);
$agi->say_digits($checkresult);
...
[/CODE]
[/LEFT]
[CENTER]ببخشید که مطلب کمی طولانی شد
[/CENTER]