2016-05-01 4 views
0

In meiner Laravel App zuzugreifen versucht, installierte ich stevebauman/location": "1.3.*

Es funktioniert in meinem lokalen Server in Ordnung. Nachdem ich es auf dem Remote-Server hochgeladen, diese Linie

$contents = json_decode(file_get_contents($this->url.$ip), true);

in der Datei

F:\xampp\htdocs\news5.2.23\vendor\stevebauman\location\src\Drivers\FreeGeoIp.php

wirft den Fehler, den ich erwähnt.

suchte ich viel und versucht, die folgenden:

  • ich die $ url hallte und dann kopiert und direkt in Browser setzen, es ist alles in Ordnung.
  • allow_ini_set("allow_url_include", "on");ini_set("allow_url_fopen", "on"); schrieb es in index.php
  • verwendet curl .Ich die FreeGeoIp Klasse whereI verwendet curl zum Testen

    <?php 
        namespace Stevebauman\Location\Drivers; 
    
        use Stevebauman\Location\Objects\Location; 
        use Stevebauman\Location\Location as LocationInstance; 
    
        class FreeGeoIp implements DriverInterface 
        { 
         /** 
         * Holds the current Location class instance. 
         * 
         * @var LocationInstance 
         */ 
         private $instance; 
    
         /** 
         * Holds the configuration instance. 
         * 
         * @var \Illuminate\Config\Repository 
         */ 
         private $config; 
    
         /* 
         * Holds the drivers URL 
         */ 
         private $url; 
    
         /** 
         * Constructor. 
         * 
         * @param LocationInstance $instance 
         */ 
         public function __construct(LocationInstance $instance) 
         { 
          $this->instance = $instance; 
    
          $this->config = $this->instance->getConfig(); 
    
          $this->url = $this->config->get('location.drivers.FreeGeoIp.url'); 
         } 
    
         /** 
         * Retrieves the location from the driver FreeGeoIp and returns a location object. 
         * 
         * @param string $ip 
         * 
         * @return Location 
         */ 
         public function get($ip){ 
    
          $location = new Location(); 
          $file = $this->file_get_contents_curl(urlencode($this->url.$ip)); 
          die();  
    
          return $location; 
         } 
    
         public function file_get_contents_curl($url) { 
    
          $ch = curl_init($url); 
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
          curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
          curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
          var_dump($ch); 
          $data = curl_exec($ch); 
          if($errno = curl_errno($ch)) { 
           $error_message = curl_strerror($errno); 
           echo "cURL error ({$errno}):\n {$error_message}.</br>"; 
          } 
          curl_close($ch); 
          return $data; 
         } 
        } 
    

Dann fand ich diesen Fehler

cURL bieten Fehler (6): Der Hostname konnte nicht aufgelöst werden.

Endlich habe ich irgendwo, dass vielleicht der Server meiner Seite ist in eine Firewall, die ausgelagerten URL-Aufruf blockiert. Ich weiß nicht, warum das wäre!

Interessant, als ich versuchte return redirect('http://freegeoip.lwan.ws/json/visitor_ip') - diese Linie in einer Funktion eines meiner Controller, es hat funktioniert!

Also muss ich das Firewall-Problem auch richtig verwerfen?

Aber wenn ich file_get_contents('http://freegeoip.lwan.ws/json/visitor_ip') in der gleichen Funktion verwenden, funktioniert es nicht wieder.

Die Leute scheinen meine Frage zu beantworten, ohne sie überhaupt zu lesen. Ich gebe Antworten, die ich bereits versucht und erwähnt habe. Bitte lesen.

Antwort

0

ermöglichen, von der php.ini allow_url_fopen

+0

Es ist in meinen Kunden Shared Hosting. Wie kann ich dort php.ini ändern? –

+0

fragen Sie Ihren Dienstanbieter. –

+0

lassen sie mich nicht ändern .. was ist der andere Weg .. Außerdem habe ich es in meiner Bewerbung festgelegt. –