php - 在 Symfony2 中加载 php 扩展 - 连接到 SAP

标签 php symfony php-extension saprfc

作为第一个问题,我将从困难的事情开始!

我正在开发一个 Symfony 项目,该项目可以与 SAP 链接以提取数据并执行一些报告。我用了sapnwrfc来自 piersharding 的扩展,因为它是唯一可以在我的环境(Windows x86 和 php 5.6.8)中编译的扩展之一。

第一步的效果还不错:

  • 将dll文件添加到php/ext
  • 将 php-sapnwrfc-x86.dll 行添加到 php.ini
  • 它出现在 phpinfo() 上
  • 使用以下代码使其在 symfony(独立 php 脚本)之外的示例文件中工作:

/test.php

 <? php
 require_once 'sap_config.php';
 require_once 'spyc.php';
 extension_loaded("sapnwrfc");
 global $SAP_CONFIG;
 class _
 {
     public function setUp() {
         global $SAP_CONFIG;
         $this->config = Spyc::YAMLLoad($SAP_CONFIG);
     }

     public function sapConnect() {
         try {
             $this->conn = new sapnwrfc($this->config);
         }
         ....
  • 所以我在 Symfony 项目中尝试了类似的方法,但出现了此错误:

    "Attempted to load class "sapnwrfc" from the global namespace. Did you forget a "use" statement?"

使用此代码:

/src/myBundle/Extensions/SapConnection.php

<?php

namespace SE\InputBundle\Extensions;

use SE\InputBundle\Extensions\SapConfig;
use SE\InputBundle\Extensions\Spyc;
use SE\InputBundle\Entity\SAPRF;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;

//the following doesn't seem to do much:
extension_loaded("sapnwrfc");

use sapnwrfc;
use sapnwrfcConnectionException;
use sapnwrfcCallException;

global $SAP_CONFIG;

class SapConnection
{
    public function setUp() {
        global $SAP_CONFIG;
        $this->config = Spyc::YAMLLoad($SAP_CONFIG);
        //the following displays "false"
        $alertpop = (class_exists("sapnwrfc")) ? "true" : "false";
        echo "<script type='text/javascript'>alert('$alertpop');</script>";
    }

    public function sapConnect() {
        try {
            // the error is triggered here
            $this->conn = new sapnwrfc($this->config);
        }
        catch (sapnwrfcConnectionException $e) {
            echo "Exception type: ".$e."<br />";
            echo "Exception key: ".$e->key."<br />";
            echo "Exception code: ".$e->code."<br />";
            echo "Exception message: ".$e->getMessage();
        }
        catch (Exception $e) {
            echo "Exception type: ".$e."\n";
            echo "Exception key: ".$e->key."\n";
            echo "Exception code: ".$e->code."\n";
            echo "Exception message: ".$e->getMessage();
            throw new Exception('Connection failed.');
        }    
    }

.....

当然,如果我删除 use 语句,它也不起作用...... 谷歌并没有多大帮助,因为这看起来非常具体。你有好主意吗? 这是否是 symfony 和 php 扩展之间的兼容性问题,或者我是否必须通知 Symfony 使用此类作为 php 扩展?或者我的项目配置中的某个地方做错了什么?

如果您想了解更多详细信息,请告诉我!

最佳答案

尝试以下操作:

use \sapnwrfc;
use \sapnwrfcConnectionException;
use \sapnwrfcCallException;

您缺少\,这会导致php在当前命名空间(即Extensions)中搜索这些类。 (代码中的第一行。)

此外,您需要转义您的类/异常。

public function sapConnect() {
    try {
        // the error is triggered here
        $this->conn = new \sapnwrfc($this->config);
    }
    catch (\sapnwrfcConnectionException $e) {
        echo "Exception type: ".$e."<br />";
        echo "Exception key: ".$e->key."<br />";
        echo "Exception code: ".$e->code."<br />";
        echo "Exception message: ".$e->getMessage();
    }
    catch (\Exception $e) {
        echo "Exception type: ".$e."\n";
        echo "Exception key: ".$e->key."\n";
        echo "Exception code: ".$e->code."\n";
        echo "Exception message: ".$e->getMessage();
        throw new \Exception('Connection failed.');
    }    
}

希望有帮助。

关于php - 在 Symfony2 中加载 php 扩展 - 连接到 SAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30860515/

相关文章:

php - 添加固定价格项目 : Specify MPN in VariationSpecifics. 名称值列表

php - 显示列表中状态为 "user"或 "admin"的所有用户

添加此 .htaccess 后,PHP 方法 ="post"停止工作...为什么?

mysql - Doctrine - 获取下一条和上一条记录

javascript - 文本区域只渲染一次的聊天应用程序中的反 CSRF 方法

php - 如何在 Wampserver 中安装 PHP 扩展 libsodium?

php - 清理多余的 PHP 扩展 - 将所有内容切换到 mcrypt 或 openssl?

php - 仅回显数据库行的值

PHP 扩展 - 从另一个 PHP 函数调用您自己的 PHP 函数

php - Symfony 4 登录时凭据无效