0

我有一个奇怪的问题。我在 PHP 中创建了一个执行这些操作的过程:

  1. 从 MySQL 表中读取数据(9.000 行)
  2. 将一行写入另一个表
  3. 根据行中的字段在 Alfresco 中创建文件夹

我遇到了这个奇怪的问题(仅在一个 Alfresco 安装上,在其他安装上我没有问题),在前 2-3 行之后,管理员用户的密码从 Alfresco 中删除(如果您查看数据库,你找不到它),所以程序停止。我正在使用露天社区 3.2。

这是该过程的PHP代码:

   require_once("../components/com_astra/libs/AlfrescoConnect.php");
require_once("../components/com_astra/libs/FirePHPCore/fb.php");
$username = "***";
$password = "****;";
$hostname = "localhost"; 
ob_start();
//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
  or die("Unable to connect to MySQL");
echo "Connected to MySQL<br>";
$selected = mysql_select_db("lbs_8",$dbhandle)
  or die("Could not select examples");
$result = mysql_query("SELECT count(*) as quanti FROM ast_tabellaTemporaneaNdg");
if (!$result) {
    die('ERRORE: ' . mysql_error());
}
$totaleTabella = mysql_result($result, 0);
echo("La tabella ast_tabellaTemporaneaNdg contiene [$totaleTabella] records<br>");
echo("Conto il numero di record della vista di transcodifica<br>");
$result = mysql_query("SELECT count(*) as quanti FROM vista_ndg_normalizzati");
if (!$result) {
    die('ERRORE: ' . mysql_error());
}
$totaleVista = mysql_result($result, 0);
echo("La vista vista_ndg_normalizzati contiene [$totaleVista] records<br>");
if ($totaleTabella == $totaleVista){
    echo("Tutte le righe della tabella ast_tabellaTemporaneaNdg sono transcodificate correttamente<br>");
    echo("Saranno quindi importati [$totaleTabella] records<br>");
}else{
    echo("Non tutte le righe della tabella ast_tabellaTemporaneaNdg sono transcodificate correttamente<br>");
    echo("nella tabella ast_tabellaTemporaneaNdg sono presenti [$totaleTabella] records, di questi solo [$totaleVista] transcodificano correttamente<br>");
    $handle = fopen("ndgNonImportabili.txt", "w");
    $result = mysql_query("SELECT ndg FROM ast_tabellaTemporaneaNdg WHERE ndg NOT IN (SELECT ndg from vista_ndg_normalizzati)");
    if (!$result) {
        die('ERRORE: ' . mysql_error());
    }
    while ($row = mysql_fetch_assoc($result)){
        $ndg = "NDG: ".$row["ndg"]."\n";
        fwrite ($handle, $ndg);

    }
    fclose($handle);
    echo("Gli NDG non importabili sono stati loggati nel file ndgNonImportabili.txt<br>");
    //die("L'importazione avra' inizio solo quando tutti gli NDG saranno importabili. I motivi per cui un ndg non è importabile possono essere: incorenza fra Natura Giuridica 1 e natura giuridica 2, Incoerenza fra comune, Provincia e Regione<br>");
}
$result = mysql_query("SELECT * FROM vista_ndg_normalizzati");
//fb($result, 'risultati');
$handle = fopen("logImportazione.txt", "w");
while ($row = mysql_fetch_assoc($result)) {
    $user = "admin";
    $ndg = $row['ndg'];
    $response = AlfrescoConnect::createNDG($ndg, $user);
    $status = $response['esito'];
    if($status == "OK"){
        $ragioneSociale = mysql_real_escape_string($row['ragioneSociale']);
        $query = "SET FOREIGN_KEY_CHECKS=0";
        $resultSetKeys = mysql_query($query);
        $query = "INSERT INTO ast_Cliente (idUtente, idNaturaGiuridica,  idTipoSegmento, idRegione, idProvincia, idComune,  ragioneSociale, ndg, idNaturaGiuridica2) VALUES ";
        $query .= " (1, ".$row['idNaturaGiuridica'].", 2 , ".$row['idRegione'].", ".$row['idProvincia'].", ".$row['idComune'].", '".$ragioneSociale."', '".$ndg."', ".$row['idNaturaGiuridica2'].")";
        //fb($query);
        $resultInsert = mysql_query($query);
        if (!$resultInsert) {
            $messaggio = "Si è verificato un errore nell'importazione dell'ndg [$ndg]: [".mysql_error()."]\n";
        }else{
            $messaggio = "[$ndg] importato con successo\n";
        }
        fwrite ($handle, $messaggio);
    }else{
        $messaggio = "Si è verificato un errore nella creazione della cartella per l'ndg [$ndg] su alfresco. ERRORE: [".$response['motivazione']."]\n";
        fwrite ($handle, $messaggio);

    }
   }
fclose($handle);
echo("importazione completata: i risultati dell'importazione sono stati salvati nel file logImportazione.txt");
?> 

该文件夹是通过调用$response = AlfrescoConnect::createNDG($ndg, $user);where$ndg是文件夹的名称和$user创建它的用户来创建的

这是 AlfrescoConnect.php 的代码:

class AlfrescoConnect
{

    static public $webscriptURL = "http://localhost:8080/alfresco/service";
    static public $login = "/api/login";
    static public $login_ticket = "/api/login/ticket";
    static public $alfrescoPath = "http://localhost:8080";

    static public $alfrescoContext = "/alfresco";

    static public $upload_file_script = "/astra/upload";
    static public $uploadFile = "/astra/uploaddoc";
    static public $search_document = "/astra/cercadocumenti";
    static public $createNDG = "/astra/creandg";
    static public $createPEFPerNDG = "/astra/creapef";
    static public $searchDocumentPerConfirm = "/astra/cercadocumentoperconferma";
    static public $confirmDocument = "/astra/confermadocumenti";
    static public $getPEF = "/astra/estraidatipef";
    static public $updatePEF = "/astra/aggiornapef";
    static public $documentCounter = "/astra/contadocumenti";
    static public $userLogin = "/astra/creautente";
    static public $cancella = "/astra/managedocumentversions";
    static public $alfUsername = "admin";
    static public $alfPassword = "admin";

    static public $ticket = "";
    static public $userTicket = ""; 

    static public function Authenticate($username='') {
        //fb($username);
        if(strcmp($username,'')==0){
            if (AlfrescoConnect::isAuthenticated()) return true;
            $link = AlfrescoConnect::$webscriptURL.AlfrescoConnect::$login."?u=".AlfrescoConnect::$alfUsername."&pw=".AlfrescoConnect::$alfPassword . "&noCache=" .time();
            fb($link, "LINK");
        }else{
            AlfrescoConnect::$userTicket =  AlfrescoConnect::CustomAuthentication($username);
            return true;
        }
        try {

            //perform a http/get request to get tiket
            // Try to create a ticket
            // If the ticket fails, it means that the username and/or password are wrong
            $r= new HttpRequest($link, HttpRequest::METH_GET);
            $r->send() ;
            $http_response = $r->getResponseBody();fb($http_response, "RISPOSTA");
            $pos1 = stripos($http_response, "<ticket>");
            $pos2 = stripos($http_response, "</ticket>");
            //ceck if token is returned 
            if ($pos1<0 | !is_int($pos1) || $pos2<0 | !is_int($pos2)) {
                AlfrescoConnect::$ticket = "";
                $returnValue = false;
            } else {

                $pos1 += 8;
                $pos2 -= $pos1;
                // clean the xml info
                AlfrescoConnect::$ticket = substr($http_response, $pos1, $pos2);
                $returnValue = true;
            }
            //fb(AlfrescoConnect::$ticket);
            $_SESSION["ticket"] = AlfrescoConnect::$ticket;
            return true;

        }
        catch (Exception $e) {
            fb($e, "Eccezione");
            AlfrescoConnect::$ticket = "";
            $_SESSION["ticket"] = AlfrescoConnect::$ticket;
            return $returnValue;
        }

    }
    static public function isAuthenticated() {
        if (!isset($_SESSION["ticket"])) return false;
        $link = AlfrescoConnect::$webscriptURL.AlfrescoConnect::$login_ticket."/".$_SESSION["ticket"]."?alf_ticket=".$_SESSION["ticket"]."&noCache=" .time();
        fb($link, 'link in isauth');
        try {

            //perform a http/get request to get tiket
            // Try to create a ticket
            // If the ticket fails, it means that the username and/or password are wrong
            $r= new HttpRequest($link, HttpRequest::METH_GET);
            $r->send() ;
            $http_response = $r->getResponseBody();

            $pos1 = stripos($http_response, "<ticket>");
            $pos2 = stripos($http_response, "</ticket>");
            //ceck if token is returned 
            if ($pos1<0 | !is_int($pos1) || $pos2<0 | !is_int($pos2)) {
                return false;
            } else {

                $pos1 += 8;
                $pos2 -= $pos1;
                // clean the xml info
                if ($_SESSION["ticket"] == substr($http_response, $pos1, $pos2)) {
                    AlfrescoConnect::$ticket = $_SESSION["ticket"];
                    return true;
                }
            }
        }
        catch (Exception $e) {
            return false;
        }
    }

    static public function CustomAuthentication($username=''){

        $url = AlfrescoConnect::$webscriptURL.AlfrescoConnect::$userLogin;
        if ($auth) {
            if (!AlfrescoConnect::Authenticate()) return -1;
            $url .= "?alf_ticket=".AlfrescoConnect::$ticket;
        }
        $parameter = array('username' => $username);
//      
        $response = AlfrescoConnect::Query($url, $parameter,HttpRequest::METH_POST,1,0);fb($url);fb($parameter);
        fb($response,'custom authentication result');

        return $response;
    }

    * perform query on alfresco webscripts
    *
    * @param    string  $url  alfresco webscript url
    * @param    string  $params parameter for the query
    * @param    string  $meth metohod for http request HTTP_METH_POST/HTTP_METH_GET default HTTP_METH_POST
    * @param    boolean $auth set whether or not to need authentication
    * @return   mixed   -1 for authentication faliure, -2 for query faliure
    */
    static public function Query($url, $params, $meth = HTTP_METH_POST, $auth = 1, $decode = 1, $ticketUser='') {
        //Aggiunto per evitare il caching 
        //fb($url, "Query url");
        //fb($params, "Query params");
        //print_r(debug_backtrace());
        $nocache=time();
        $params['nocache']=$nocache;
        if ($auth) {
            if(strcmp($ticketUser,'')==0){

                if (!AlfrescoConnect::Authenticate()) return -1;
                $params['alf_ticket'] = AlfrescoConnect::$ticket;
            }
            else{

                $params['alf_ticket'] = $ticketUser;
            }

        }
        fb($params,'param');
        try {
            //fb("invio della richiesta");
            $url=$url."?nocache=$nocache";
            $r= new HttpRequest($url, $meth);
            $r->addQueryData($params);
            $r->send() ;
            fb($r);
            $http_response = $r->getResponseBody();
            fb($http_response);
            if (!$decode) return $http_response;


            $json = new Services_JSON();

            return object2array($json->decode($http_response));

            //return json_decode($http_response, true);
        }
        catch (Exception $e) {
            return -2;
        }
    }   

    /**
     * Azioni su Alfresco
     * 
     */

    static public function createNDG($ndg, $user){
        $url = AlfrescoConnect::$webscriptURL.AlfrescoConnect::$createNDG;
        fb("Crea l'ndg,$url");
        if (strcmp($user,'')!=0) {
            $ticket = AlfrescoConnect::Authenticate($user);
            if (!$ticket) return -1;
        }
        $parameter = array(ModelParameter::$ndg => $ndg);

        $response = AlfrescoConnect::Query($url, $parameter,HTTP_METH_POST,1,1,AlfrescoConnect::$userTicket);

        return $response;

    }

}
4

1 回答 1

0

这是一个内存问题。永远不要尝试在只有 1GB 内存的机器上运行 Alfresco!

于 2011-03-21T17:12:42.103 回答