aboutsummaryrefslogtreecommitdiffstats
path: root/admin/include/functions.php
diff options
context:
space:
mode:
Diffstat (limited to 'admin/include/functions.php')
-rw-r--r--admin/include/functions.php81
1 files changed, 52 insertions, 29 deletions
diff --git a/admin/include/functions.php b/admin/include/functions.php
index e7e6b1a16..15c057771 100644
--- a/admin/include/functions.php
+++ b/admin/include/functions.php
@@ -1684,7 +1684,7 @@ function cat_admin_access($category_id)
* @param global $dest: can be a file ressource or string
* @return bool
*/
-function fetchRemote($src, &$dest, $user_agent='Piwigo', $step=0)
+function fetchRemote($src, &$dest, $get_data=array(), $post_data=array(), $user_agent='Piwigo', $step=0)
{
// Try to retrieve data from local file?
if (!url_is_remote($src))
@@ -1701,27 +1701,14 @@ function fetchRemote($src, &$dest, $user_agent='Piwigo', $step=0)
}
}
- // Send anonymous data to piwigo server
- if ($_SERVER['HTTP_HOST'] != 'localhost' and $step==0
- and preg_match('#^http://(?:[a-z]+\.)?piwigo\.org#', $src))
- {
- global $conf;
-
- $src = add_url_params($src, array(
- 'uuid' => hash_hmac('md5', get_absolute_root_url(), $conf['secret_key']),
- 'os' => urlencode(PHP_OS),
- 'pwgversion' => urlencode(PHPWG_VERSION),
- 'phpversion' => urlencode(phpversion()),
- 'dbengine' => urlencode(DB_ENGINE),
- 'dbversion' => urlencode(pwg_get_db_version()),
- )
- );
- $src = str_replace('&', '&', $src);
- }
-
// After 3 redirections, return false
if ($step > 3) return false;
+ // Initialization
+ $method = empty($post_data) ? 'GET' : 'POST';
+ $request = empty($post_data) ? '' : http_build_query($post_data, '', '&');
+ $src = add_url_params($src, $get_data, '&');
+
// Initialize $dest
is_resource($dest) or $dest = '';
@@ -1733,6 +1720,11 @@ function fetchRemote($src, &$dest, $user_agent='Piwigo', $step=0)
@curl_setopt($ch, CURLOPT_HEADER, 1);
@curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+ if ($method == 'POST')
+ {
+ @curl_setopt($ch, CURLOPT_POST, 1);
+ @curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
+ }
$content = @curl_exec($ch);
$header_length = @curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$status = @curl_getinfo($ch, CURLINFO_HTTP_CODE);
@@ -1741,7 +1733,7 @@ function fetchRemote($src, &$dest, $user_agent='Piwigo', $step=0)
{
if (preg_match('/Location:\s+?(.+)/', substr($content, 0, $header_length), $m))
{
- return fetchRemote($m[1], $dest, $user_agent, $step+1);
+ return fetchRemote($m[1], $dest, array(), array(), $user_agent, $step+1);
}
$content = substr($content, $header_length);
is_resource($dest) ? @fwrite($dest, $content) : $dest = $content;
@@ -1752,7 +1744,15 @@ function fetchRemote($src, &$dest, $user_agent='Piwigo', $step=0)
// Try file_get_contents to read remote file
if (ini_get('allow_url_fopen'))
{
- $content = @file_get_contents($src);
+ $opts = array(
+ 'http' => array(
+ 'method' => $method,
+ 'content' => $request,
+ 'user_agent' => $user_agent,
+ )
+ );
+ $context = @stream_context_create($opts);
+ $content = @file_get_contents($src, false, $context);
if ($content !== false)
{
is_resource($dest) ? @fwrite($dest, $content) : $dest = $content;
@@ -1771,13 +1771,16 @@ function fetchRemote($src, &$dest, $user_agent='Piwigo', $step=0)
return false;
}
- fwrite($s,
- "GET ".$path." HTTP/1.0\r\n"
- ."Host: ".$host."\r\n"
- ."User-Agent: ".$user_agent."\r\n"
- ."Accept: */*\r\n"
- ."\r\n"
- );
+ $http_request = $method." ".$path." HTTP/1.0\r\n";
+ $http_request .= "Host: ".$host."\r\n";
+ $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
+ $http_request .= "Content-Length: ".strlen($request)."\r\n";
+ $http_request .= "User-Agent: ".$user_agent."\r\n";
+ $http_request .= "Accept: */*\r\n";
+ $http_request .= "\r\n";
+ $http_request .= $request;
+
+ fwrite($s, $http_request);
$i = 0;
$in_content = false;
@@ -1810,7 +1813,7 @@ function fetchRemote($src, &$dest, $user_agent='Piwigo', $step=0)
if (preg_match('/Location:\s+?(.+)$/',rtrim($line,"\r\n"),$m))
{
fclose($s);
- return fetchRemote(trim($m[1]),$dest,$user_agent,$step+1);
+ return fetchRemote(trim($m[1]),$dest,array(),array(),$user_agent,$step+1);
}
$i++;
continue;
@@ -2023,4 +2026,24 @@ function get_fckb_tag_ids($raw_tags)
return $tag_ids;
}
+
+function get_hosting_technical_details()
+{
+ global $conf;
+
+ $details = array();
+ if ($conf['send_hosting_technical_details'] and $_SERVER['HTTP_HOST'] != 'localhost')
+ {
+ $details = array(
+ 'uuid' => hash_hmac('md5', get_absolute_root_url(), $conf['secret_key']),
+ 'os' => urlencode(PHP_OS),
+ 'pwgversion' => urlencode(PHPWG_VERSION),
+ 'phpversion' => urlencode(phpversion()),
+ 'dbengine' => urlencode(DB_ENGINE),
+ 'dbversion' => urlencode(pwg_get_db_version()),
+ );
+ }
+
+ return $details;
+}
?> \ No newline at end of file