صفحة 1 من 2 12 الأخيرةالأخيرة
النتائج 1 إلى 15 من 25

الموضوع: مشكل مع الدالة file_get_contents

  1. #1
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2008
    المشاركات
    361

    مشكل مع الدالة file_get_contents



    السلام عليكم،

    عند تنفيذ امر الحصول على صفحة موقع باستعمال الدالة file_get_contents اتلقى رسالة الخطا هاته :

    file_get_contents(http://example.com/index.html)
    [function.file-get-contents]: failed
    to open stream: HTTP request failed!
    HTTP/1.1 403 Forbidden

    ما سبب هذا الخطأ ؟

    شكراً.





    __________________
    مجلتي الصغيرة


  2. #2
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    السبب على ما اعتقد ان الموقع اكتشف انك تحاول فتحه بطريقة غير المتصفح

    الحل أن تقوم باستعمال curl لايهام الموقع انك متصفح مثل الفيرفوكس أو غيره

    ويمكن ان تستعمل ال streams لفتح الموقع دون الاعتماد على مكتبة curl
    مثل:

    كود PHP:
        $context stream_context_create(array('http' => array(
            
    'method' => "POST",
            
    'header' => "(anti-spam-content-type:) text/xml",
            
    'content' => $request
        
    )));

        
    $file = @file_get_contents($blogURL."/xmlrpc.php"false$context); 
    الأشياء الموجودة في المصفوفة هي عبارة عن ال headers
    واهم شيء فيها هو ال user-agent الذي يمكن عن طريقه ان تكتب اسم المتصفح الذي تريد
    وبالتالي توهم الموقع ان الطلب يتم من المتصفح
    يمكن ان تستعمل ادوات لتحليل طلبات ال http مثل tamper data الخاص بالفيرفوكس حتى تعرف
    كيف يتم ارسال الطلب وما هي الحقول المطلوبة في ال header

    http://www.useragentstring.com/






  3. #3
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2008
    المشاركات
    361


    حاولت بناء على ردك البحث عن امثلة.

    وقد جربت هذا ولكنه لم يعمل كذلك :

    كود PHP:
    <?php
    /**
     * Copyright (c) 2008, David R. Nadeau, NadeauSoftware.com.
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     *    * Redistributions of source code must retain the above copyright
     *      notice, this list of conditions and the following disclaimer.
     *
     *    * Redistributions in binary form must reproduce the above
     *      copyright notice, this list of conditions and the following
     *      disclaimer in the documentation and/or other materials provided
     *      with the distribution.
     *
     *    * Neither the names of David R. Nadeau or NadeauSoftware.com, nor
     *      the names of its contributors may be used to endorse or promote
     *      products derived from this software without specific prior
     *      written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
     * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
     * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
     * OF SUCH DAMAGE.
     */

    /*
     * This is a BSD License approved by the Open Source Initiative (OSI).
     * See:  http://www.opensource.org/licenses/bsd-license.php
     */


    /**
     * Get a file on the web.  The file may be an (X)HTML page, an image, etc.
     * Return an associative array containing the page header, contents, and
     * HTTP status code.
     *
     * Values in the returned array include:
     *
     *     "header"    the HTTP response header
     *     "http_code"    the last error/status code
     *     "content"    the page content (text, image, etc.)
     *
     * On success, "http_code" is 200 and "content" has the web page.
     *
     * On an error with the URL, such as a redirect limit, or timeout, null
     * is returned.
     *
     * On an error with the web site, such as a missing page, no permissions,
     * or no service, "http_code" will be the HTTP error code, and "content"
     * will be missing.
     *
     * Parameters:
     *     url        the URL of the page to get
     *
     * Return values:
     *     the page text or the HTTP error code.
     *
     * See also:
     *     http://nadeausoftware.com/articles/2007/07/php_tip_how_get_web_page_using_fopen_wrappers
     */
    function get_web_page$url )
    {
        
    $options = array( 'http' => array(
            
    'user_agent'    => 'spider',        // who am i
            
    'max_redirects' => 10,              // stop after 10 redirects
            
    'timeout'       => 120,             // timeout on response
        
    ) );
        
    $context stream_context_create$options );
        
    $page    = @file_get_contents$urlfalse$context );
        
    $result  = array( );
        if ( 
    $page != false )
            
    $result['content'] = $page;
        else if ( !isset( 
    $http_response_header ) )
            return 
    null;    // Bad url, timeout

        // Save the header
        
    $result['header'] = $http_response_header;

        
    // Get the *last* HTTP status code
        
    $nLines count$http_response_header );
        for ( 
    $i $nLines-1$i >= 0$i-- )
        {
            
    $line $http_response_header[$i];
            if ( 
    strncasecmp"HTTP"$line) == )
            {
                
    $response explode' '$line );
                
    $result['http_code'] = $response[1];
                break;
            }
        }

        return 
    $result;
    }

    $url "http://www.echoroukonline.com/ara";
    $result get_web_page$url );

    if ( 
    $result == null )
        echo 
    "... error: bad url, timeout, redirect loop ...";

    if ( 
    $result['http_code'] != 200 )
        echo 
    "... error: no page, no permissions, no service ...";

    $page $result['content'];

    echo 
    "<pre>".$page."</pre>";
    ?>
    :con2:





    __________________
    مجلتي الصغيرة

  4. #4
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    طيب اعطيها هالدالة:
    كود PHP:
    <?php
    function get_website($url){
            
    $curl curl_init();
            
    curl_setopt $curlCURLOPT_URL,$url);
            
    curl_setopt $curlCURLOPT_RETURNTRANSFERtrue );
            
    curl_setopt $curlCURLOPT_FOLLOWLOCATIONtrue );
            
    curl_setopt $curlCURLOPT_HEADER,false);
            
    curl_setopt $curlCURLOPT_COOKIE,"cookie.tmp" );
            
    curl_setopt $curlCURLOPT_COOKIEJAR,"cookie.tmp");
            
    curl_setopt $curlCURLOPT_COOKIEFILE,"cookie.tmp" );
            
    curl_setopt ($curlCURLOPT_REFERER,$url);
            
    curl_setopt $curlCURLOPT_USERAGENT$_SERVER['HTTP_USER_AGENT'] );
            
    curl_setopt $curlCURLOPT_PORT,"80" );
            
    curl_setopt $curlCURLOPT_TIMEOUT,);
            
    $result curl_exec $curl );
            
    curl_close($curl);
            return 
    $result;
            
    }
    echo (
    get_website("http://www.echoroukonline.com/ara/"));
    هذه الدالة تستعمل curl ، الصراحة ما جربت اعملها على الstreams
    لكن اعتقد انها تنفع والمشكلة اما في ال user-agent
    حيث انه عندك spider وهو غير معروف
    أو بسبب الكوكيز(بعض المواقع لا تقبل سوى متصفحات مفعل فيها الكوكيز - اذكر ان موقع "العربية" يفعل هذا)

    سأجرب عملها بال streams ، سأضع الحل باذن الله إن نفع






  5. #5
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2008
    المشاركات
    361


    اشتغل الامر بمكتبة CURL ومع ذلك هناك رسالة خطأ من المستضيف :


    Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/xxx/public_html/test/contents/get_web_page3.php on line 6

    وانا بانتظار التجريب بطريقة stream.

    شكرا.







    __________________
    مجلتي الصغيرة

  6. #6
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600

  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2008
    المشاركات
    361


    حسنا ساحذفها.

    اذا ممكن في سياق تتابع الموضوع :

    1 - انا اريد ان اجد في الصفحة الرئيسية بعد جلبها، القسم div الخاص بالافتتاحية.

    2 - ابحث فيه عن رابط الموضوع : editorial/76594.html

    3 - في الاخير الحصول على الافتتاحية كاملة وحفظها في ملف txt.

    شكراً.





    __________________
    مجلتي الصغيرة

  8. #8
    عضو سوبر نشيط
    تاريخ التسجيل
    Feb 2004
    المشاركات
    627


    واخواني وانا ادور بالنت لقيت هل كود إلي يخلي الجهاز يتصفح من خلال الفيرفوكس

    كود PHP:
    <?php
    ini_set
    ("user_agent""Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
    $html file_get_contents("http://www.yahoo.com"); 
    echo 
    $html;
    ?>
    السؤال هل هذا الكود إلي حظيته يسبب مشاكل ولا لا ؟؟

    وشكراً لكم جميعاً و ابصراحه وايد استفدة من هل موضوع





    __________________
    اللهم أغفر لنا ولوالدينا وللمؤمنين والمؤمنات والمسلمين والمسلمات
    الأحياء منهم والأموات يا أرحم الراحمين

  9. #9
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    يمكن ان تستعمل ال xpath
    للوصول إلى اي شيء تريده في الصفحة

    هذا الكود يعمل لكن انتبه للتكويد:
    كود PHP:
    <?php
    function get_website($url){
            
    $curl curl_init();
            
    curl_setopt $curlCURLOPT_URL,$url);
            
    curl_setopt $curlCURLOPT_RETURNTRANSFERtrue );
            
    curl_setopt $curlCURLOPT_FOLLOWLOCATIONtrue );
            
    curl_setopt $curlCURLOPT_HEADER,false);
            
    curl_setopt $curlCURLOPT_COOKIE,"cookie.tmp" );
            
    curl_setopt $curlCURLOPT_COOKIEJAR,"cookie.tmp");
            
    curl_setopt $curlCURLOPT_COOKIEFILE,"cookie.tmp" );
            
    curl_setopt ($curlCURLOPT_REFERER,$url);
            
    curl_setopt $curlCURLOPT_USERAGENT$_SERVER['HTTP_USER_AGENT'] );
            
    curl_setopt $curlCURLOPT_PORT,"80" );
            
    curl_setopt $curlCURLOPT_TIMEOUT,);
            
    $result curl_exec $curl );
            
    curl_close($curl);
            return 
    $result;
            
    }
    $target "http://www.echoroukonline.com/ara/";

    $content =  (get_website($target)); 

    $dom = new DOMDocument('UTF-8');
    @
    $dom->loadHTML($content);

    $xpath = new DOMXPath($dom);

    $result $xpath->query("/html/body/div[2]/div[2]/div[2]/div[2]/div[2]/div/div/div/div[2]/a");

    $url $result->item(0)->getAttribute("href");

    $url $target $url;

    $content get_website($url);
    @
    $dom->loadHTML($content);

    $xpath = new DOMXPath($dom);


    $result $xpath->query('//*[@id="article_body"]');

    echo (
    $result->item(0)->nodeValue);
    للحصول على ال xpath استعمل اضافة firebug







    الصور المرفقة الصور المرفقة  

  10. #10
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2008
    المشاركات
    361


    أهلا اخي احمد.

    قمت بتجريب الكود اعلاه ولكن تلقيت هذه الرسالة :

    Fatal error: Call to a member function getAttribute() on a non-object in ...






    __________________
    مجلتي الصغيرة

  11. #11
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    جربته قبل الارسال ...

    الخطأ يقول انه لم يجد رابط مقالة الافتتاحية لسبب ما
    ربما لأنه لم يتمكن من جلب الصفحة من الأصل؟!

    على كل حال الادوات اصبحت معك
    curl
    domDocument
    xpath

    بالتوفيق






  12. #12
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2008
    المشاركات
    361


    قمت بعمل :

    echo $content;

    قبل الدالة getattribute

    وحصلت على استعراض للصفحة ولكن في آخر سطر ظهرت رسالة الخطأ مرة أخرى حول الدالة





    التعديل الأخير تم بواسطة apitos ; 04-06-2011 الساعة 03:49 AM
    __________________
    مجلتي الصغيرة

  13. #13
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600

  14. #14
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2008
    المشاركات
    361


    بارك الله فيك اخي احمد وشكرا جزيلا لتعبك معي.

    تقبل تحيتي الخالصة.





    __________________
    مجلتي الصغيرة

  15. #15
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    واخواني وانا ادور بالنت لقيت هل كود إلي يخلي الجهاز يتصفح من خلال الفيرفوكس

    كود PHP:
    <?php
    ini_set
    ("user_agent""Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
    $html file_get_contents("http://www.yahoo.com"); 
    echo 
    $html;
    ?>
    السؤال هل هذا الكود إلي حظيته يسبب مشاكل ولا لا ؟؟

    وشكراً لكم جميعاً و ابصراحه وايد استفدة من هل موضوع
    الدالة ini_set لا تعمل إلا اذا كان السيف مود مغلق
    لكن يمكن تغييرها من php.ini اذا امكن

    بارك الله فيك اخي احمد وشكرا جزيلا لتعبك معي.

    تقبل تحيتي الخالصة.
    بارك الله فيك أخي
    الحقيقة اني جربت الكود وعمل معي، لا استطيع ان اعرف سبب المشكلة










ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض