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


Saving Path and file info to mysql while using 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服务器

试一试:

<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!');
  }
?>