New question

Question:

Date: 03-10-2019 13:46:35 (In Spanish)

PHP - ¿Cómo hacer que CURL ejecute desde un Bucle?[Unresolved]

Hola,
Necesito leer un fichero txt para insertar una linea a la vez en Servicio Web remoto.
Yo logro exito solo cuando ejecuto la aplicacion con un solo dato.
Pero se hago la lectura del fichero y intento insertar los datos , no pasa nada.
Gracias por la ayuda.

1 - Ejemplo de la aplicacion funcional solo con un dato.
<?php
set_time_limit(0);

/* API URL */
$url = 'https:..';
$header = array("Authorization: Basic Q09CUkFSUjp2UT..","Content-Type: application/json");

/* Array Parameter Data */
$data = '{"cliente":"8609","acao":"858","motivo":"699","obs":"data-2019-09-20 php"}';

/* Init cURL resource */
$ch = curl_init($url);
/* pass encoded JSON string to the POST fields */
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

/* set the content type json */
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
/* set return type json */
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
/* execute request */
 $result = curl_exec($ch);
 echo $result.'<br>';  
/* close cURL resource */
curl_close($ch);
echo 'fim'.'<br>';
?>


2 - Estoy intentando hacer de esta forma
2.1 - Fichero txt
'{"cliente":"8609","acao":"858","motivo":"699","obs":"data-2019-09-20 php"}'
'{"cliente":"8610","acao":"858","motivo":"699","obs":"data-2019-09-20 php"}'

2.2 - Code PHP
<?php
/* Envio de multiplas lineas datos  */

set_time_limit(0);

$dir = 'C:/00cargas'; // directorio para lectura del fichero
$dir2= 'C:/00cargasok/';

$dh = opendir($dir);
$arq = readdir($dh);

  // bucle que para leer todos los ficheros
	while (false != ($arq = readdir($dh))){
	// evalua ficheros
		$exten = substr($arq,strlen($arq)-3,3);
		if ($exten != "" && $exten !="." && strtolower($exten) !="jpg" && strtolower($exten) !="gif" && strtolower($exten) !="bmp"){
		
			$cont_lin=0;
			$linea="";
			$data="";

			/* API URL */
      $url = 'https:...';
      $header = array("Authorization: Basic Q09CUkFSUjp2UThYM....=","Content-Type: application/json");
			
			// abrir fichero
			$arquivo = fopen($dir."/".$arq,"r");

		  // evalua se hay fichero para leer
			if ($arquivo){
				while (!feof ($arquivo)){
					$linea = fgets($arquivo);
          $data =  substr($linea,0,strlen($linea)-2); // quita el '\r\n'

				  /* Init cURL resource */
          $ch = curl_init($url);

    			//curl_setopt($ch, CURLOPT_URL, $url);
					/* pass encoded JSON string to the POST fields */
					curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
					 echo $data.'<br>';
					/* set the content type json */
					curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
					 
					/* set return type json */
					curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
					
					/* execute request */
					 $result = curl_exec($ch);

						if (curl_errno($ch)) {
								echo 'Error: ' . curl_error($ch).'<br>';
						}   
						/* close cURL resource */
						curl_close($ch);
				}
				fclose($arquivo);
	    }// cierra el WHILE $arquivo
	  }// cierra le  WHILE exten
  }// cierra el  WHILE readdir
?>


Tags: cURL - PHP - Question Votes: 1 - Answers: 3 - Views: 7 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 05-10-2019 03:19:34 Hola Jose, ante todo bienvenido a la comunidad.

    Te cuento que estuve analizando tu código, aquí una versión un poco más simplificada:

    <?php
    //ver todos los errores
    ini_set('display_errors', '1');
    error_reporting(-1);
    
    /* Envio de multiplas lineas datos  */
    
    set_time_limit(0);
    
    $dir = 'C:/00cargas'; // directorio para lectura del fichero
    $dh = opendir($dir);
    
    // bucle que para leer todos los ficheros
    while (false != ($arq = readdir($dh))) {
        // evalua ficheros
        $exten = substr($arq, strlen($arq) - 3, 3);
        if ($exten != "" && $exten != "." && strtolower($exten) == "txt") {
    
            $linea = "";
            $data = "";
    
            // abrir fichero
            $arquivo = fopen($dir . "/" . $arq, "r");
    
            // evalua se hay fichero para leer
            if ($arquivo) {
                while (!feof($arquivo)) {
                    $linea = fgets($arquivo);
                    $data = substr($linea, 0, strlen($linea) - 2); // quita el '\r\n'
                    
                    echo $data . '<br>';
                    
                    //aquí tu llamada cURL
                    
                }
                fclose($arquivo);
            }// cierra el WHILE $arquivo
        }// cierra le  WHILE exten
    }// cierra el  WHILE readdir
    


    Prueba ejecutarla y verifica si en pantalla obtienes el retorno esperado:
    '{"cliente":"8609","acao":"858","motivo":"699","obs":"data-2019-09-20 php"}'
    '{"cliente":"8610","acao":"858","motivo":"699","obs":"data-2019-09-20 php"}'
    


    Observa que agregue también las siguientes líneas para ver todos los errores (independiente de la configuración del servidor):
    ini_set('display_errors', '1');
    error_reporting(-1);
    


    Finalmente si tu resultado es el esperado, intenta incluir la llamada cURL en cuestión y nos cuentas como te fue.

    Saludos y buen código!
      Votes: 2 - Link answer
     
  • Date: 05-10-2019 04:12:09 Fernando,
    gracias por contestarme.

    La herramienta Postman exhibe un codigo em PHP para que yo pueda hacer uso.
    Yo no he logrado exito para ponerlo en una sola linea.

    ¿Puedes convertirlo para que yo la utilice?

    Código de la herramienta Postman
    curl -i -X POST \
       -H "Authorization:Basic Q09CU...=" \
       -H "Content-Type:application/json" \
       -d \
    '{
      "cliente":"743697320859348994",
      "acao":"858395203934588928",
      "motivoContato":"690928542932504576",
      "observacao":"data-2019-09-20 teste"
    }' \
     'https://banc.....os.co....s.com.br/api/ass...s/tarefas/manual'
     
      Votes: -1 - Link answer
     
  • Date: 05-10-2019 12:42:04 Hola Jose, pero según comentabas antes "...Ejemplo de la aplicacion funcional solo con un dato...", este punto ya estaba resuelto, no?

    Si obtienes un resultado con un solo dato (en tu ejemplo inicial), ahí esta tu solución, deberías seguir la línea de tu pregunta original.

    Pudiste hacer la prueba que te comente anteriormente?

    Saludos y buen código!
      Votes: 2 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com