0

私はこの質問を見ました:問題が PEAR の古いバージョンを使用していると述べた update pearの問題、まあ、私は 1.9.4 (最新) を使用しています。

dinosaurhunter:~ root# pear -V
PEAR Version: 1.9.4
PHP Version: 5.3.21
Zend Engine Version: 2.3.0
Running on: Darwin dinosaurhunter.network.local 12.2.1 Darwin Kernel Version 12.2.1: Thu Oct 18 16:32:48 PDT 2012; root:xnu-2050.20.9~2/RELEASE_X86_64 x86_64

自作のPHPを使用しています。

とても奇妙:

dinosaurhunter:~ root# pear upgrade
Error getting channel info from pear.php.net: Connection to `pear.php.net:80' failed: Operation timed out
Error getting channel info from pear.php.net: Connection to `pear.php.net:80' failed: Operation timed out
Error getting channel info from pear.php.net: Connection to `pear.php.net:80' failed: Operation timed out
Error getting channel info from pear.php.net: Connection to `pear.php.net:80' failed: Operation timed out
Error getting channel info from pear.php.net: Connection to `pear.php.net:80' failed: Operation timed out
Nothing to upgrade

dinosaurhunter:~ root# curl pear.php.net:80 | head -n5
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14420    0 14420    0     0  41953      0 --:--:-- --:--:-- --:--:-- 66759
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head >
<link rel="alternate" href="http://blog.pear.php.net/feed/" type="application/rss+xml" title="PEAR News" /> <title>PEAR - PHP Extension and Application Repository</title>
 <link rel="shortcut icon" href="/gifs/favicon.ico" />

プロキシのことだと言っている人もいます。私もプロキシを使用していません。

dinosaurhunter:~ root# pear config-show | grep -i proxy
HTTP Proxy Server Address      http_proxy       <not set>

彼らが言うところの URL は問題なく動作するため、私は本当に迷っています。私はプロキシを使用していません。PEAR は最新です。他に何が考えられるでしょうか?

EDITはさらにデバッグを行いました...

このコードは機能します:

<?php


error_reporting(E_ALL);
ini_set('display_errors', 1);

ini_set ('allow_url_fopen', 1);

$url = 'http://www.google.com';

// Create a stream
$opts = array(
  'http'=>array(
    'timeout'=>60,
  )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents($url, false, $context);

var_dump($file);

ただし、これは機能しません。

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

ini_set ('allow_url_fopen', 1);

$file = file_get_contents('http://www.google.com/');
var_dump($file);

次のエラーで失敗します。

警告: file_get_contents(http://www.google.com/): ストリームを開けませんでした: 操作がタイムアウトしました

4

2 に答える 2

1

根底にある問題はdefault_socket_timeout構成です。

次のように設定しました。

; Default timeout for socket based streams (seconds)
; http://php.net/default-socket-timeout
default_socket_timeout = unlimited

に変更しました

; Default timeout for socket based streams (seconds)
; http://php.net/default-socket-timeout
default_socket_timeout = 120

そしてそれは動作します。

「無制限」file_get_contentsの値を尊重しないようです。default_socket_timeoutブラッ!

于 2013-03-06T22:46:24.120 に答える
0

wiresharkを実行し、pearが実際にネットワークで何をするかを確認します。pear -vvvvvv実行してデバッグ出力を取得することもできます。これにより、問題の原因に関するヒントが得られる場合があります。

于 2013-03-06T16:15:37.900 に答える