使用curl时将路径和文件信息保存到mysql

时间:2011-08-22 13:14:45

标签: php mysql curl

使用共享服务器。

我可以使用curl保存外部图像。但我无法将路径和文件信息保存到mysql。

<form method="post" enctype="multipart/form-data">
<table>
 <tr><td><b>URL: </b> </td><td><input type="**text**" name="url" id="url" size=40></td>  </tr>
 <tr><th colspan=2><p><input name="upload" type="submit" class="box" id="upload" value="Upload"></p></th></tr>
 </table>
 </form>

 <?php

 set_time_limit(0);
 ini_set('display_errors',true);//Just in case we get some errors, let us know....

 if (isset($_POST['upload']))
 {

  $url = $_POST['url'];
  $dir = "./files/";

  $fileName = $_FILES['url']['name'];
  $fileSize = $_FILES['url']['size'];
  $fileType = $_FILES['url']['type'];
  $filePath = $dir . $fileName;

  $ch = curl_init($url);
  $fp = fopen ($local_file, 'w+');
  $ch = curl_init($remote_file);
  curl_setopt($ch, CURLOPT_TIMEOUT, 50);
  curl_setopt($ch, CURLOPT_FILE, $fp);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_ENCODING, "");
  curl_exec($ch);
  curl_close($ch);

  include ('db.php');
  if(!get_magic_quotes_gpc())
  {
  $fileName = addslashes($fileName);
  $filePath = addslashes($filePath);
  }
  $query = "INSERT INTO upload2 (name, size, type, path ) ". "VALUES ('$fileName', '$fileSize', '$fileType', '$filePath')";
 mysql_query($query);
 mysql_close($conn);
 }

当我将输入类型从文件更改为文本时,它无效。

我需要获取文件信息并保存到mysql服务器

1 个答案:

答案 0 :(得分:0)

顺便说一下:

<form method="post" enctype="application/x-www-form-urlencoded">
  <table>
    <tr>
      <td style="font-weight:bold;">URL:</td>
      <td><input type="text" name="url" id="url" size=40 value="http://" /></td>
    </tr>
    <tr>
      <!-- Why is this a <th> and not a <td> ? -->
      <th colspan="2"><input name="upload" type="submit" class="box" id="upload" value="Upload" /></th>
    </tr>
  </table>
</form>

<?php

  set_time_limit(0);
  ini_set('display_errors',true);//Just in case we get some errors, let us know....

  if (isset($_POST['upload'])) {

    // Build local file system paths
    $baseDir = "./files";
    $fileName = basename(rtrim($_POST['url'],'/')); // This means that if someone specifies the root of a domain (/) it will call the local file "domain"
    $filePath = rtrim($baseDir,'/')."/$fileName";

    // Try to parse the URL we have been given and add any missing required info
    if ((!$parts = parse_url($_POST['url'])) || !isset($parts['host'])) die('ERROR: The specified URL is invalid');
    $url = (isset($parts['scheme']) && $parts['scheme']) ? $parts['scheme'].'://' : 'http://';
    if (isset($parts['user']) && $parts['user']) {
      $url .= $parts['user'];
      if (isset($parts['pass']) && $parts['pass']) $url .= ':'.$parts['pass'];
      $url .= '@';
    }
    $url .= $parts['host'];
    if (isset($parts['port']) && $parts['port']) $url .= ':'.$parts['port'];
    $url .= (isset($parts['path']) && $parts['path']) ? $parts['path'] : '/';
    if (isset($parts['query']) && $parts['query']) $url .= '?'.$parts['query'];
    if (isset($parts['fragment']) && $parts['fragment']) $url .= '#'.$parts['fragment'];

    print("Fetching file '$url' to '$filePath'<br />\n");

    // Open a local file point in write mode
    if (file_exists($filePath)) die("ERROR: The file '$filePath' already exists");
    $fp = fopen($filePath,'w') or die("ERROR: Could not open local file '$filePath' for writing!");

    // Let's go cURLing...
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_TIMEOUT, 50);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_ENCODING, "");
    curl_exec($ch);
    $fileSize = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
    $fileType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    $transferTime = curl_getinfo($ch, CURLINFO_TOTAL_TIME);

    print("cURL operation complete (took $transferTime seconds)<br />\n");

    // Close cURL and the local file pointer, we're done with them both
    curl_close($ch);
    fclose($fp);

    // Check the $fileSize reported by cURL is the same as the file size on disk
    if ($fileSize != ($fs = filesize($filePath))) {
      print("WARNING: file size reported by cURL ($fileSize bytes) does not match size of file on disk ($fs bytes)<br />\nUsing size of file on disk for DB insert<br />\n");
      $fileSize = $fs;
    }

    include ('db.php');
    $query = "INSERT INTO upload2 (name, size, type, path ) ".
    "VALUES ('".mysql_real_escape_string($fileName)."', '$fileSize', '$fileType', '".mysql_real_escape_string($filePath)."')";

    print("Running MySQL Query: $query<br />\n");

    mysql_query($query);
    mysql_close($conn);

    print('Done!');

  }

?>