2016-09-18 2 views
-1

저는 Cloudatcost를 고용했으며, 우분투 서버를 구성하고 램프를 설치하고 웹 페이지를 업로드했습니다. 일부 텍스트 필드와 이미지를 업로드하는 섹션이 있습니다. 문제는 이미지가 업로드되지 않지만 내 페이지를 로컬로 실행할 때 문제가 있다는 것입니다.Insert_id가 서버에 업로드 된 웹에서 작동하지 않습니다.

내 삽입 코드는 다음과 같이 진행됩니다

function insert($title, $intro, $body, $data ,$date, $someid, $Myimage, $somesection){ 

    $ID = null; 
    $mysqli = openConnection(); <- starts connection 
    $query = "INSERT INTO columnsa (title, intro, body, data, date, someid) VALUES (?, ?, ?, ?, ?, ?)"; 
    if ($stmt = $mysqli->prepare($query)) 
    { 
     $stmt->bind_param(

'sssssi', $title, $intro, $body, $data, $date, $someid);   
     /* Execution*/ 
     $stmt->execute(); 

     $ID = $mysqli->insert_id; 
     /* Close query */ 
     $stmt->close(); 
    } 
    if($ID) 
    { 
     if ($image != null) { 
      insertImg($image, $ID, $section); 
      closeConnection($mysqli); 
      return true; 
     } 
    } 
    else 
    { 
     closeConnection($mysqli); 
     return false; 
    } 
} 

그리고 내 이미지 삽입은 다음과 같습니다

function insertImg($image, $ID, $section) 
    { 
     switch ($seccion) { 
      case "journey": 
       move_uploaded_file($imagen['tmp_name'], "../../img/journeys/".$ID.".jpg"); 
       break; 
      case "column": 
       move_uploaded_file($imagen['tmp_name'], "../../img/bolumns/".$ID.".jpg"); 
       break; 
     case "blog": 
      move_uploaded_file($imagen['tmp_name'], "../../img/blogs/".$ID.".jpg"); 
      break; 
    } 
} 

내가, 어쩌면 내가 PHP5 모듈을 설치하는 것을 잊지 같은데요 라인 때문에

$ID = $mysqli->insert_id; 
     /* Close query */ 
     $stmt->close(); 
    } 
    if($ID) 
    { 
     if ($image != null) { 
      insertImg($image, $ID, $section); 
      closeConnection($mysqli); 
      return true; 
     } 
    } 
    else 
    { 
     closeConnection($mysqli); 
     return false; 
    } 

작동하지 않는 것 같습니다. php5 모듈에 insert_id가 포함 된 아이디어가 있습니까? 감사합니다.

+0

서버 파일 시스템에 파일을 만드는 것과 관련하여 권한 문제가 더 많이 발생했습니다 – Hiren

+0

우분투 서버에 권한을 부여하는 방법이 있습니까? –

+0

호스트와 함께 사용하는 호스팅 유형에 따라 다릅니다 (Cloudatcost). 일부 호스트는 권한을 설정할 수있는 파일 관리자를 제공하고, 일부는 쉘 액세스가 제한되도록 허용합니다. – Hiren

답변

0

1. 행이 데이터베이스에 삽입되었는지 확인하십시오. 삽입하지 않으면 잘못된 결과가 발생했습니다. 잘못된 쿼리 (예 : 필드 이름 또는 ...) 또는 연결 문제가 있습니다. 데이터베이스에 문제가 없다면 2 번으로 가십시오. 업로드하려고하는 폴더에 의해 적절한 권한이

2.check 경우 :

ls -l 

은하지 적절한 권한이 있는지. 읽기 : https://help.ubuntu.com/community/FilePermissions

3. 데이터베이스 및 권한에 문제가 없다면 잘못된 폴더에 삽입하려고한다는 뜻입니다. dirname(__FILE__)으로 시도해보십시오. 현재 파일 디렉토리를 가져옵니다. 당신이 로그를 찾을 수없는 경우

이 파일

sudo nano /var/log/apache2/error.log 

로 이동 로그인 확인을 위해

move_uploaded_file($imagen['tmp_name'], dirname(__FILE__)."/../../img/journeys/".$ID.".jpg"); 

move_uploaded_file($imagen['tmp_name'], "../../img/journeys/".$ID.".jpg"); 

: 예를 들어,이 줄을 변경 파일이 있으면이 파일로 이동하여 로그 파일의 위치를 ​​찾으십시오.

sudo nano /etc/php_version/apache2/php.ini 

* 당신은 당신이 만든 만든 질문에 따라, Last inserted ID가 검색하려면 적절한 폴더

+0

행이 올바르게 삽입되고 있으며, 이미지가 업로드되고 있지 않습니다. ls -1은 서버 콘솔에서 해당 명령을 실행한다는 의미입니까? –

+0

ls -l ../path/myproyect를 사용하여 권한을 검사했고 내 이미지 폴더가 drwxr-xr-x 7 루트 루트 4096 및 날짜를 ​​반환했습니다. –

+1

해결했습니다! 고마워요 @ james는 error.log 파일을 사용하여 많은 도움이되었습니다! –

0

와 php_version을 대체하는 것은 당신이

  1. 실행 된 명령문
  2. 을 실행했는지 의무
  3. 성명 성명 진술서

이후 Inse 마지막 삽입 된 ID를 mysqli.* 또는 PDO에 얻으려면 순서대로 수행하십시오.

코드에서 실행 후 쿼리를 실행하지 않았으므로 마지막으로 삽입 한 ID를 가져 오는 방법을 변경해야합니다.

교체 :

$ID = $mysqli->insert_id; 

으로 :

$ID = $stmt->insert_id; 

참고 :을 당신이 $mysqli 당신과 함께 혼자가 아닌 $stmt를 사용하여 쿼리를 실행했기 때문에 내가 언급 한대로 그것을 바꿀 필요가있다. (Mysqli) 여기

$sql = "INSERT INTO MyGuests (firstname, lastname, email) 
VALUES ('John', 'Doe', '[email protected]')"; 
if (mysqli_query($conn, $sql)) { 
    $last_id = mysqli_insert_id($conn); 
    echo "New record created successfully. Last inserted ID is: " . $last_id; 
} else { 
    echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 
mysqli_close($conn); 

당신이 후 쿼리를 실행 한 : 아래

는 시나리오 1은 MysqliPDO에 따라 마지막 삽입 된 ID를 얻는 방법의 예입니다 쿼리가 실행 중입니다.

시나리오 2 : (PDO)는

<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "password"; 
$dbname = "myDBPDO"; 
try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $sql = "INSERT INTO MyGuests (firstname, lastname, email) 
    VALUES ('John', 'Doe', '[email protected]')"; 
    // use exec() because no results are returned 
    $conn->exec($sql); 
    $last_id = $conn->lastInsertId(); 
    echo "New record created successfully. Last inserted ID is: " . $last_id; 
    } 
catch(PDOException $e) 
    { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 
$conn = null; 
?> 
0

나는 적절한 권한을 할당하여 그것을 해결했습니다. 으로 this questions이라고 말하면

모든 파일이 Apache 그룹과 사용자의 소유인지 확인하십시오. 우분투에서 그것은 www가 데이터 그룹 및 사용자

chown -R www-data:www-data /path/to/webserver/www 

다음을 읽고 내 이미지 폴더에 파일

chmod -R g+rw /path/to/webserver/www 

내가 읽어 준 및 쓰기 권한을 작성 www가 데이터 그룹의 모든 구성원을 사용할 수있다 좋은 보안 관행으로 인해 내 웹 페이지의 폴더 밖에 있습니다.

관련 문제