빈 페이지를 제공하는 PHP, 오류 없음
문제
Ajax 응용 프로그램의 다음 부분이 있습니다. 오류는 없지만 화면에는 아무것도 표시되지 않으므로 문제가 어디에 있는지 확실하지 않습니다. CMD & ID = 1을 사용하여 브라우저에서 직접이 페이지를 호출하거나 CMD없이 전화를 걸어야합니다. CMD 오류 메시지를 반환해야합니다.
편집 : 테스트 사례 추가 : CMD 오류 메시지가 표시되지만 & id = 1 (1이 유효한 ID 임)을 통과하면 HTML이 반환되지 않으면 소스 뷰가 완전히 비워집니다. 에코를 잘못 사용했거나 비슷한 것을 사용 했습니까?
edit2 : echo가 첫 번째 줄로 추가 : 첫 번째 에코는 보이지 않습니다.
EDIT3 : 이전 버전으로 돌아가서 모든 변경 사항을 다시 한 후 유효한 CMD 및 ID 매개 변수로 호출 할 때 테스트 숯 출력을 얻습니다. 내가 사용하는 코드는 아래에 붙여 넣은 것과 동일합니다.
코드:
<?php
echo "hello world";
error_reporting(E_ALL);
if (isset($_GET["cmd"]))
$cmd = $_GET["cmd"];
else
die("You should have a 'cmd' parameter in your URL");
$id = $_GET["id"];
$con = mysqli_connect("localhost", "user", "password", "db");
echo "test con";
if(!$con)
{
die('Connection failed because of' .mysqli_connect_error());
echo "test error";
}
//$con->query("SET NAMES 'utf8'");
$con->set_charset("utf8"));
echo "test charset";
if($cmd=="GetSALEData")
{
echo "test cmdifloop";
if ($getRecords = $con->prepare("SELECT * FROM SALES WHERE PRODUCT_NO = ?"))
{
echo "test recordifloop";
$getHtml = $con->prepare("SELECT PRODUCT_DESC FROM SALES WHERE PRODUCT_NO = ?");
$getHtml->bind_param("s", $id);
$getHtml->execute();
$getHtml->bind_result($PRODUCT_DESC);
$getRecords->bind_param("s", $id);
$getRecords->execute();
$getRecords->bind_result($PRODUCT_NO, $PRODUCT_NAME, $SUBTITLE, $CURRENT_PRICE, $START_PRICE,
$PRICE_COUNT, $QUANT_TOTAL, $QUANT_SOLD, $ACCESSSTARTS, $ACCESSENDS,
$ACCESSORIGIN_END, $USERNAME, $BEST_PRICEDER_ID, $FINISHED, $WATCH,
$BUYITNOW_PRICE, $PIC_URL, $PRIVATE_SALE, $SALE_TYPE, $ACCESSINSERT_DATE,
$ACCESSUPDATE_DATE, $CAT_DESC, $CAT_PATH, $COUNTRYCODE, $LOCATION,
$CONDITIONS, $REVISED, $PAYPAL_ACCEPT, $PRE_TERMINATED, $SHIPPING_TO,
$FEE_INSERTION, $FEE_FINAL, $FEE_LISTING, $PIC_XXL, $PIC_DIASHOW,
$PIC_COUNT, $ITEM_SITE_ID
);
while ($getRecords->fetch())
{
$ccodes = array( "1" => "USA",
"77" => "Germany",
"16" => "Austria",
"122" => "Luxemburg",
"193" => "Switzerland",
);
$conditions = array( "0" => "USA",
"77" => "Germany",
"16" => "Austria",
);
$country = $ccodes[$COUNTRYCODE];
if ( $country == "" ) $country = "Not applicable";
$columns = array('FINISHED', 'WATCH', 'PRIVATE_SALE', 'REVISED', 'PAYPAL_ACCEPT', 'PRE_TERMINATED', 'PIC_XXL', 'PIC_DIASHOW');
foreach($columns as $column) {
$$column = $row[$column] ? 'YES' : 'NO';
}
imageResize($PIC_URL, 250, 300);
file_put_contents($id, file_get_contents($PIC_URL));
$html = htmlentities(json_encode($PRODUCT_DESC));
$shortDate = strftime("%d %m %Y", strtotime($ACCESSSTARTS));
echo "<h1>".$PRODUCT_NAME."</h1>
<div id='leftlayer' class='leftlayer'>
<p><strong>Username: </strong>".$USERNAME."
<p><strong>PRODUCT Number: </strong>".$PRODUCT_NO."
<p><strong>Subtitle: </strong>".$SUBTITLE."
<p><strong>SALE Start: </strong>".$ACCESSSTARTS."
<p><strong>SALE End: </strong>".$ACCESSENDS."
<p><strong>SALE Type: </strong>".$SALE_TYPE."
<p><strong>Category: </strong>".$CAT_DESC."
</div>
<div class='leftlayer2'>
<p><strong>Condition: </strong> ".$CURRENT_PRICE."
<p><strong>Total Items: </strong> ".$QUANT_TOTAL."
<p><strong>Total Sales: </strong> ".$QUANT_SOLD."
<p><strong>Start Price: €</strong> ".$START_PRICE."
<p><strong>Buyitnow Price: €</strong> ".$BUYITNOW_PRICE."
<p><strong>PRICEs: </strong> ".$PRICE_COUNT."
<p><strong>Revised: </strong> ".$REVISED."
</div>
<div class='leftlayer2'>
<p><strong>Private: </strong> ".$PRIVATE_SALE."
<p><strong>Finished: </strong> ".$FINISHED."
<p><strong>Cancelled: </strong> ".$PRE_TERMINATED."
<p><strong>Paypal: </strong> ".$PAYPAL_ACCEPT."
<p><strong>Country: </strong> ". $country ."
<p><strong>Location: </strong> ".$LOCATION."
<p><strong>Shipping to: </strong> ". $country ."
</div>
<div id='rightlayer'>
<img src='".$PIC_URL."' width='".$imageSize["width"]."' height='".$imageSize["height"]."'>
<p><a href='#' onclick=\"makewindows(" . $html . "); return false;\">Click for full description </a></p>
</div>
</div>
</div>";
}
}
function imageResize($imageURL, $maxWidth, $maxHeight)
{
$imageSize["width"] = 0;
$imageSize["height"] = 0;
$size = getimagesize($imageURL);
if ($size) {
$imageWidth = $size[0];
$imageHeight = $size[1];
$wRatio = $imageWidth / $maxWidth;
$hRatio = $imageHeight / $maxHeight;
$maxRatio = max($wRatio, $hRatio);
if ($maxRatio > 1) {
$imageSize["width"] = $imageWidth / $maxRatio;
$imageSize["height"] = $imageHeight / $maxRatio;
return $imageSize;
} else {
$imageSize["width"] = $imageWidth;
$imageSize["height"] = $imageHeight;
return $imageSize;
}
} else {
die(print_r(error_get_last()));
}
}
}
간격에 대해 사과드립니다. 그러나 코드 버튼을 누르면 자동으로 발생합니다.
해결책
당신은 22 행에 여분의 괄호가 있습니다
이것
$con->set_charset("utf8"));
이것이어야합니다
$con->set_charset("utf8");
미래를위한 두 가지 디버깅 팁. 먼저 웹 호스트에 대한 쉘 액세스가 필요하거나 개발 시스템에 로컬로 PHP를 설치해야합니다. UNIX를 실행하는 경우 이미 가질 수 있습니다. 터미널을 열고 타이핑하십시오
php -v
당신이 그것을 가지고 있다면, 당신은 php 파일의 구문을 확인하여
//on *nix
php yourfile.php
//or on windows
c:\path\to\php.exe yourfile.php
이것은 총 구문 오류에 대해 구제합니다. 또한 Google/Google/Setup PHP 로컬 튜토리얼 "또는 유사한 내용을 검색하여 Webserver, MySQL 데이터베이스 및 자신의 컴퓨터에서 실행되는 PHP의 전체 사본을 얻는 방법을 배우는 유사한 내용입니다.
로컬 사본을 설치하면 더 쉬운 두 번째 제안은 오류 로그를 확인하는 것입니다. PHP가 오류 메시지를 표시하지 않더라도 오류는 여전히 어딘가에 파일에 로그인됩니다. 귀하의 경우 로그 파일에서 이와 같은 것을 보았을 것입니다.
PHP Parse error: syntax error, unexpected ')' in foo.php on line 22
다른 팁
이렇게하면 오류를 볼 수 있습니다.
ini_set('display_errors', '1');
여기에는 추가 폐쇄 괄호가 있습니다.
$con->set_charset("utf8"));
출력을 테스트하기 위해 스크립트 상단에 즉시 인쇄 또는 에코 문을 배치하는 기본 테스트를 시도 했습니까?
<?php
print "Test";
?>
나는 또한 an을 사용하는 것을 제안 할 것이다 or die($msg)
연결 시도 후에 잡으십시오.
당신의 경우에 괜찮을 것입니다. 출발점으로. 필요할 때 때때로이 작업을 수행합니다. 문제가 큰 복잡한 문제라고 가정하기보다는 종종 요청 변수, 잘못된 페이지에 액세스하고 잘못된 시간에 오른쪽 페이지에 액세스하는 등의 예기치 않은 조건으로 판명됩니다.
도움이 될 수 있습니다 :
웹 서버 로그를 모니터링하십시오 (예 :
tail -f /var/log/apache2/error.log
)Firebug를 사용하고 콘솔에서 스크립트에서 나오는 Ajax 응답을 참조하십시오. 오류가 나타날 수 있습니다
디버그 에코에 도달하지 않으면 실패 지점은 무언가를 놓치지 않는 한 데이터베이스 연결 주위에있는 것 같습니다.
연결 세부 정보를 확인하고 MySQLI 확장 기능이 활성화되어 있는지 확인하십시오.
비슷한 문제가 발생했는데, 비슷한 문제가 발생했는데, 비슷한 문제가 발생했지만 일반적으로 IE6에서도 다른 브라우저에서 빈 페이지를 얻을 수 있습니다. 캐릭터 인코딩 문제로 판명되었습니다. 나는 이상한 캐릭터를 출력했고 브라우저는 인코딩이 내용을 기반으로 한 것을 추측하고있었습니다. 이 헤더를 명시 적으로 설정하여 고정했습니다.
header('Content-type: text/html; charset=utf-8');
$getHtml->bind_param("s", $id);
이것이 오류를 일으킬 지 모르겠지만 GetRecords bind_param에 "i"가 첫 번째 매개 변수로 사용되지 않아야합니까?
이 페이지를 브라우저에서 직접 호출합니다
?cmd&id=1
돌아와야합니다
"반환"이란 무엇을 의미합니까? 내가 당신의 코드에서 볼 수있는 것에서 당신은 필요합니다 ?cmd=
GetSALEData
또는 모든 것이 내부에 래핑되기 때문에 빈 페이지가 반환됩니다. if($cmd=="GetSALEData")
성명.
보정: 넌 봐야 해 "test contest charset
"쿼리 문자열이있는 경우 cmd
"getSaledata"이외의 것으로 설정하십시오. (이 두 테스트는 나중에 코드에 추가되었습니다.)
여기에는 몇 가지 좋은 제안이 있습니다. 내가 아직 보지 못한 것은 PHP에 충분한 메모리가 할당되는지 확인하는 것입니다. 사람들은 그다지 drupal.org 좋은 분류를하십시오 PHP의 메모리 할당을 높이는 방법.
if-else 진술 주위에 괄호를 넣으십시오. 코드를 편집 한 사람이 잠재적 인 문제를 "고정"했을 수 있다고 생각합니다.
이런 일이 발생하는 이유는 서버 구성이 오류가 표시되지 않도록 설정되었으므로 스크립트가이를 실행하는 데 의존하기 때문입니다. error_reporting(E_ALL);
- 이것은 오래 작동해야합니다 error_reporting()
기능이 실행됩니다. 하지만, 구문 분석 오류가있는 경우 error_reporting(E_ALL)
실행되지 않습니다, 그리고 php.ini 오류보고 설정이 덮어 쓰지 않기 때문에 Foreyou는 오류가 표시되지 않습니다.
유일한 솔루션은 htaccess 또는 php.ini와 같은 더 높은 곳에서 Error_Reporting을 설정하는 것입니다. 그러나 지금은 적어도 빈 페이지 = 구문 분석 오류를 알고 있습니다!
오류가없고 빈 페이지를 계속 받으면 PHP 프로세스를 설치하는 것이 좋습니다.
yum -y install php-process
다른 경우에는 배를 설치하지 않으면 그러한 오류가 발생합니다.
yum -y install php-pear php-pear-DB
또는 DB를 설치하려면 pear install DB
이것이 빈 페이지 문제가있는 사람에게 도움이되기를 바랍니다.