10

我使用 WampServer 版本 2.2 php5.3.13 使用 Windows 7

我把我的项目放在 www

并在我的项目执行期间显示此错误

Fatal error: Call to undefined function http_build_url() in C:\wamp\www

在我的项目的源代码中,我使用这种语法

$url = http_build_url($url);

我想我需要配置 wamp

4

2 回答 2

9
  1. 检查您的扩展文件夹中的php_http.dll文件。
  2. 如果文件存在,请检查您的(或任何其他包含的 .ini-s)php_http中是否启用了扩展名php.ini
  3. 如果文件不存在,要么从http://downloads.php.net/pierre/单独下载它,要么从http://museum.php.net/与其他 pecl 扩展(您可能需要其中一些)一起下载php5/pecl-5.2.6-Win32.zip。调整您的php.ini以启用扩展。
  4. 重新启动您的网络服务器。
于 2012-12-27T15:39:16.523 回答
5

这有效

 if(!function_exists('http_build_url'))
        {
            // Define constants
            define('HTTP_URL_REPLACE',          0x0001);    // Replace every part of the first URL when there's one of the second URL
            define('HTTP_URL_JOIN_PATH',        0x0002);    // Join relative paths
            define('HTTP_URL_JOIN_QUERY',       0x0004);    // Join query strings
            define('HTTP_URL_STRIP_USER',       0x0008);    // Strip any user authentication information
            define('HTTP_URL_STRIP_PASS',       0x0010);    // Strip any password authentication information
            define('HTTP_URL_STRIP_PORT',       0x0020);    // Strip explicit port numbers
            define('HTTP_URL_STRIP_PATH',       0x0040);    // Strip complete path
            define('HTTP_URL_STRIP_QUERY',      0x0080);    // Strip query string
            define('HTTP_URL_STRIP_FRAGMENT',   0x0100);    // Strip any fragments (#identifier)

            // Combination constants
            define('HTTP_URL_STRIP_AUTH',       HTTP_URL_STRIP_USER | HTTP_URL_STRIP_PASS);
            define('HTTP_URL_STRIP_ALL',        HTTP_URL_STRIP_AUTH | HTTP_URL_STRIP_PORT | HTTP_URL_STRIP_QUERY | HTTP_URL_STRIP_FRAGMENT);

            /**
             * HTTP Build URL
             * Combines arrays in the form of parse_url() into a new string based on specific options
             * @name http_build_url
             * @param string|array $url     The existing URL as a string or result from parse_url
             * @param string|array $parts   Same as $url
             * @param int $flags            URLs are combined based on these
             * @param array &$new_url       If set, filled with array version of new url
             * @return string
             */
            function http_build_url(/*string|array*/ $url, /*string|array*/ $parts = array(), /*int*/ $flags = HTTP_URL_REPLACE, /*array*/ &$new_url = false)
            {
                // If the $url is a string
                if(is_string($url))
                {
                    $url = parse_url($url);
                }

                // If the $parts is a string
                if(is_string($parts))
                {
                    $parts  = parse_url($parts);
                }

                // Scheme and Host are always replaced
                if(isset($parts['scheme'])) $url['scheme']  = $parts['scheme'];
                if(isset($parts['host']))   $url['host']    = $parts['host'];

                // (If applicable) Replace the original URL with it's new parts
                if(HTTP_URL_REPLACE & $flags)
                {
                    // Go through each possible key
                    foreach(array('user','pass','port','path','query','fragment') as $key)
                    {
                        // If it's set in $parts, replace it in $url
                        if(isset($parts[$key])) $url[$key]  = $parts[$key];
                    }
                }
                else
                {
                    // Join the original URL path with the new path
                    if(isset($parts['path']) && (HTTP_URL_JOIN_PATH & $flags))
                    {
                        if(isset($url['path']) && $url['path'] != '')
                        {
                            // If the URL doesn't start with a slash, we need to merge
                            if($url['path'][0] != '/')
                            {
                                // If the path ends with a slash, store as is
                                if('/' == $parts['path'][strlen($parts['path'])-1])
                                {
                                    $sBasePath  = $parts['path'];
                                }
                                // Else trim off the file
                                else
                                {
                                    // Get just the base directory
                                    $sBasePath  = dirname($parts['path']);
                                }

                                // If it's empty
                                if('' == $sBasePath)    $sBasePath  = '/';

                                // Add the two together
                                $url['path']    = $sBasePath . $url['path'];

                                // Free memory
                                unset($sBasePath);
                            }

                            if(false !== strpos($url['path'], './'))
                            {
                                // Remove any '../' and their directories
                                while(preg_match('/\w+\/\.\.\//', $url['path'])){
                                    $url['path']    = preg_replace('/\w+\/\.\.\//', '', $url['path']);
                                }

                                // Remove any './'
                                $url['path']    = str_replace('./', '', $url['path']);
                            }
                        }
                        else
                        {
                            $url['path']    = $parts['path'];
                        }
                    }

                    // Join the original query string with the new query string
                    if(isset($parts['query']) && (HTTP_URL_JOIN_QUERY & $flags))
                    {
                        if (isset($url['query']))   $url['query']   .= '&' . $parts['query'];
                        else                        $url['query']   = $parts['query'];
                    }
                }

                // Strips all the applicable sections of the URL
                if(HTTP_URL_STRIP_USER & $flags)        unset($url['user']);
                if(HTTP_URL_STRIP_PASS & $flags)        unset($url['pass']);
                if(HTTP_URL_STRIP_PORT & $flags)        unset($url['port']);
                if(HTTP_URL_STRIP_PATH & $flags)        unset($url['path']);
                if(HTTP_URL_STRIP_QUERY & $flags)       unset($url['query']);
                if(HTTP_URL_STRIP_FRAGMENT & $flags)    unset($url['fragment']);

                // Store the new associative array in $new_url
                $new_url    = $url;

                // Combine the new elements into a string and return it
                return
                     ((isset($url['scheme'])) ? $url['scheme'] . '://' : '')
                    .((isset($url['user'])) ? $url['user'] . ((isset($url['pass'])) ? ':' . $url['pass'] : '') .'@' : '')
                    .((isset($url['host'])) ? $url['host'] : '')
                    .((isset($url['port'])) ? ':' . $url['port'] : '')
                    .((isset($url['path'])) ? $url['path'] : '')
                    .((isset($url['query'])) ? '?' . $url['query'] : '')
                    .((isset($url['fragment'])) ? '#' . $url['fragment'] : '')
                ;
            }
        }
于 2018-03-09T17:05:23.737 回答