簡體   English   中英

PHP file_get_contents跨版本和操作系統的行為

[英]PHP file_get_contents behavior across versions and operating systems

我在PHP中使用file_get_contents從contentDM上的客戶端集合中獲取信息。 CDM有一個API,因此您可以通過進行php查詢來獲取該信息,例如:

http://服務器:端口/ webutilities / index.php的Q =功能/參數

到目前為止,它在計算機和操作系統上都運行良好。 但是,這次的工作方式有所不同。

http://服務器/ utils的/收集/ mycollectionname / ID /身份識別碼/文件名/ MYNAME

對於此查詢,我用相關值填寫mycollection,myid和myname。 顯然,myid和mycollection必須存在於系統中。 但是,myname可以是您想要的任何名稱。 運行查詢時,它不會向您的瀏覽器返回網頁或任何內容。 它只是自動下載一個以myname作為文件名的文件,並將其放在本地/ Downloads文件夾中。

我不想下載該文件。 我只想讀取文件的內容,它將它作為字符串直接返回到PHP。 我試圖獲取的文件僅包含xml數據。

如果我在運行Ubuntu的筆記本電腦上將PHP_7和Apache一起使用,則file_get_contents可以獲取該文件中的數據。 但是,在運行Windows 10和XAMPP(Apache和PHP5)的桌面上,出現此錯誤(我已用###替換了敏感數據):

警告:file_get_contents(### / utils / collection / ### / id / 1110 / filename / 1111.cpd):無法打開流:D:\\ Titus \\ Documents \\ GitHub \\ NativeAmericanSCArchive \\ NASCA中沒有此類文件或目錄-site \\ api \\ update.php,第18行

我的同事無法幫助我,所以我很好奇這里是否有人可以確認或否認這是操作系統問題還是PHP版本問題,以及是否有可靠的替代方法可能在PHP5和兩者中都適用Windows和Ubuntu。

file_get_contents()是一個簡單的螺絲刀。 這對於僅通過GET請求獲取數據非常有用,而其中的標頭,HTTP請求方法,超時,cookiejar,重定向和其他重要內容均無關緊要。

具有流上下文的fopen()或具有setopt的cURL是您可以想到的每一個選項和功能的超級技巧。

除此之外,由於最近一些網站被黑客入侵,我們不得不進一步保護我們的網站。 這樣做時,我們發現file_get_contents無法正常工作,而curl仍然可以正常工作。

不是100%,但我認為此php.ini設置可能已阻止了file_get_contents請求。

; Disable allow_url_fopen for security reasons
allow_url_fopen = 0

無論哪種方式,我們的代碼現在都可以使用curl。

參考: http : //25labs.com/alternative-for-file_get_contents-using-curl/ http://phpsec.org/projects/phpsecinfo/tests/allow_url_fopen.html

因此,您可以通過使用PHP cURL擴展來解決此問題。 這是一個與您嘗試的操作相同的示例:

function curl($url)
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $data = curl_exec($ch);
        curl_close($ch);

        return $data;
    }
$url = 'your_api_url';
$data = curl($url);

最后,您可以通過print_r($ data)檢查數據。 希望它會起作用,並且您會理解。

參考http : //php.net/manual/zh/book.curl.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM