-2

我们有 32 个客户端数据库,有些很大,有数百万条记录(V.11。目前,托管和构建在 Mac 上)。我已经在 Windows 2012 64x Server 上建立了一个网站,并包含了带有 PHP 版本的 PDO 的最新版本(Xamp 2.5 和 PHP/5.3.8)。插件和 Apache 是 32 倍。

我的网页连接到 4d sql 服务器上的所有 32 个客户端并运行一些 SQL 选择采石场。我遇到的问题几乎无法描述。在某些搜索条件下,它有时有效,有时无效。我的意思是,如果我搜索“jone doe”,它确实会给我结果,如果我更改后者它不会,客户端上的 SQL 连接处理程序保持挂起并且网页超时。

请注意,没有模式。一些搜索挂在一个客户端上。一些在 2 或 3。不同的搜索是相同的,但不同的客户端。只有一个对特定数量的 13 个字符的搜索通过了所有客户端,并且运行良好。我还要说我的目标是特定的表和列,所以我确定我的 SQL 查询没有问题,我的搜索框很少,它们都是单一搜索,没有 OR 或 AND SQL,我也选择了大约 4- 6 列显示该选择查询的结果。

此外,这一切都在工作中的专用网络上。所以连接也不是问题。我要补充一点,每个连接的最大结果可以是 0 - 50。这是精简的代码示例:

定义了连接,这是代码的其余部分:

function trazi($dbaza) { 
    global $db; global $db2; global $db3; global $db4; global $db5; global $db6; global $db7;  
global $db8; global $db9; global $db10; global $db11;   global $db12; global $db13; global  
$db14; global $db15; global $db16; global $db17; global $db18; global $db19; global $db20;  
global $db21; global $db22; global $db23; global $db24; global $db25; global $db26; global $db27; 
 global $db28; global $db29; global $db30; global $db31; global $db32;  
    global $inime; global $inoib; global $inbb; global $inbbroj; global $insb; 

    $odabrani = $dbaza->prepare('SELECT  STANJE, SUD_BROJ_O, SUD_BROJ_P, SUD_BROJ_JBR , NAZIV_LONG, OIB FROM PREDMETI WHERE SUD_BROJ_O = ? '); 
    $params = array($insb); 
    $odabrani->execute($params); 
    $rezultat = $odabrani->fetchAll(PDO::FETCH_ASSOC); 
unset($dbaza); 
unset($odabrani); 

if ($rezultat) { 


            <th>Ime i prezime</th>  
            <th>OIB</th> 
            <th>Bilježnički broj</th> 
            <th>Sudski parnički broj</th> 
            <th>Sudski ovršni broj</th> 
            <th>Stanje predmeta</th>';

    foreach($rezultat as $row) {
            echo "<tr>
            <td>".$row['NAZIV_LONG']. "</td>".
            "<td>".$row['OIB']."</td>".
            "<td>".$row['SUD_BROJ_JBR']."</td>".
            "<td>".$row['SUD_BROJ_P']."</td>".
            "<td>".$row['SUD_BROJ_O']."</td>".
            "<td>".$row['STANJE']."</td>".
            "</tr>";                
            } 
    echo "</table>"; 
    } else {
        echo "Vaša pretraga nije pronašla niti jedan rezultat.";
        }

}

unset($rezultat);


//ATLANTIC
echo '<br><br><div style="color:#922E19">ATLANTIC</div>';   
trazi($db);
ob_implicit_flush(true);
$buffer = str_repeat(" ", 4096);
echo $buffer;
ob_flush(); usleep(300000);

//CEDEVITA
echo '<br><br><div style="color:#922E19">CEDEVITA</div>';    
trazi($db2); 
ob_implicit_flush(true); 
$buffer = str_repeat(" ", 4096); 
echo $buffer; 
ob_flush(); usleep(300000); 

ETC... 

我真的希望这个 PDO 限制是问题,因为在某些查询中它选择了太多数据并中断。

问题:我对 4d PDO 源文件进行了更改并更改了限制。但我无法编译它,也不知道如何编译。我没有 PC,我的服务器对这个主题没有用,而且我在 Mac 上。有人可以帮我用这些更改编译一个 DLL。我将附上一个包含更改的 zip 文件。

http://forums.4d.fr/4DBB_Main/x_User/18851165/files/18851204.zip

编辑; 或者有人可以用错误修复编译我这个版本吗? https://github.com/famsf/pecl-pdo-4d

我正在使用 PHP/5.3.8 32 位。

4

2 回答 2

2

如果有人遇到这个线程,答案就在这里。编译工作就像它所说的那样,原始驱动程序毕竟是错误的。这个版本有效。我在 Ubuntu 上托管我的脚本并编译了一个新的驱动程序,并将其连接到 32 个数据库而没有错误。

您将需要 Ubuntu 12.04 并遵循以下代码。

# Install dependencies (You may need more)
sudo apt-get install php5-dev
# Clone a working version of the code from the FAMSF repo
git clone https://github.com/famsf/pecl-pdo-4d.git pdo_4d
cd pdo_4d
# Prepare the PHP extension for compiling
phpize
# Workaround acinclude.m4 pointing to incorrect header location.
# See: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1393640
sudo ln -s /usr/include/php5/ /usr/include/php
# Configure the package to the system
./configure --with-pdo-4d
# Compile!
make
# Copy the extension to PHP's library
sudo make install
# Create php5 module configuration file for PHP 5.4/5.5
sudo sh -c "echo extension=pdo_4d.so > /etc/php5/mods-available/pdo_4d.ini"
# Enable the module for PHP 5.4/5.5
sudo php5enmod pdo_4d
# Enable the module for PHP 5.3
sudo sh -c "echo extension=pdo_4d.so > /etc/php5/conf.d/pdo_4d.ini"
# Restart apache
sudo apache2ctl restart
# Check for PDO_4D in the PHP CLI Information
php -i | grep 4D

您只需要为以下步骤制作自己的文件夹;

sudo sh -c "echo extension=pdo_4d.so > /etc/php5/mods-available/pdo_4d.ini

文件夹 mods-available,它会按照它的说明做,在这之前只安装 PHP 和 Apache,但是你可以在网上找到很多解释。这只是一个单行命令,其余的由 Linux 完成。

也跳过#Enable the module for PHP 5.4/5.5,因为 Ubuntu 将有 5.3,它就是你所需要的。

于 2017-01-18T17:36:23.727 回答
1

为 php 7.0 编译 PDO_4D。在 ubuntu 16.04 32bits 上,32 很重要,因为驱动程序是为 32 系统制作的,或者至少我认为它很重要......

首先需要对应php版本的驱动和php。我推荐这个经过测试的驱动程序版本:http: //git.thesecretgamer.de/faldon/pdo_4d.git

重要提示:在安装 php 和 Apache 之前首先升级和更新您的系统,因为如果您稍后执行此操作,它将安装 php 7.1,并且驱动程序对我不起作用。

//安装服务器

sudo apt-get update
sudo apt-get install apache2
sudo apt-get install python-software-properties
sudo apt install php7.0-cli
sudo apt-get install php7.0-dev
sudo apt-get install php7.0-mbstring <--- for some reason you will need this, trust me. 
sudo apt-get install libapache2-mod-php7.0
apt install git

//汇编

# Install dependencies (You may need more)
sudo apt-get install php7.0-dev <--- I did this in steps before so skip it.
# Clone a working version of the code from the FAMSF repo
git clone http://git.thesecretgamer.de/faldon/pdo_4d.git pdo_4d <----- or just unpack your modified driver with your changes where ever you wont.
cd /var/4d/pdo_4d <------- navigate to driver folder
# Prepare the PHP extension for compiling
phpize
# Workaround acinclude.m4 pointing to incorrect header location.
# See: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1393640 <---- this may be fixed for php 7.0 but i did it anyway.
sudo ln -s /usr/include/php/20151012/ /usr/include/php
# Configure the package to the system
./configure --with-pdo-4d
# Compile!
make
# Copy the extension to PHP's library
sudo make install
# Create php module configuration file for PHP 7.0
sudo sh -c "echo extension=pdo_4d.so > /etc/php/7.0/mods-available/pdo_4d.ini"
# Enable the module for PHP 
sudo phpenmod pdo_4d
sudo sh -c "echo extension=pdo_4d.so > /etc/php/7.0/apache2/conf.d/pdo_4d.ini"
# Restart apache
sudo service apache2 restart
# Check for PDO_4D in the PHP CLI Information
php -i | grep 4D
php -m

现在请记住,可能有一些不必要的步骤,但这很有效,我做了 4 次。学分在上一篇文章中提到Brad 和这篇博客文章以及 php5 教程。我只是为php7.0修改它

于 2017-02-02T15:07:36.657 回答