سلام به تمام دوستان عزیز
آقا من میخوام که یه کدی بنویسم که عین تمام اطلاعات header و content که از سمت سرور میاد رو بگیره و با ایجاد تغییرات در content عین همون header اومده از کلاینت و content منو بفرسته برای یه سرور دیگه و عین جوابی که از سمت سرور میاد رو (header و content) بفرسته برای کلاینت
میشه دوستان کمک کنند؟
من کد قسمت اول رو به این صورت نوشتم:
[PHPS]
<?php
require_once 'db.php';
if (isset($_GET['link'])) {
$link = mysql_fetch_assoc( mysql_query("select * from table-name where id= '".$_GET['link']."'",$con));
$url= $link['link'];
set_time_limit ( 120 );
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10);
$header= getallheaders ();
$head= "<?php\r\ncurl_setopt(\$ch,CURLOPT_HTTPHEADER,array(";
for ($i=1; $i<= count ($header); $i++) {
$each= each($header);
$head.= "'".$each['key'].": ".$each['value']."',";
}
$head = substr_replace($head ,"",-1);
$head.= "));\r\n?>\r\n";
$handle= fopen('header-option.php', 'w') or die('Cannot open file: header-option.php');
fwrite($handle, $head);
fclose($handle);
include 'header-option.php';
$data = curl_exec ($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
set_time_limit (ini_get('max_execution_time'));
curl_close ($ch);
}
else {
$url="http://destination-url";
set_time_limit ( 120 );
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10);
$data = curl_exec ($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
set_time_limit (ini_get('max_execution_time'));
curl_close ($ch);
$count= preg_match_all('@"(http?://.*?)"@i',$data,$matches,PREG_OFFSET_CAPTURE);
foreach (array_reverse($matches[1]) as $match) {
$id = mysql_fetch_assoc( mysql_query("select * from table-name where link= '$match[0]'",$con));
if ( !$id ) {
mysql_query("INSERT INTO table-name (link) VALUES ('$match[0]')",$con);
$id = mysql_fetch_assoc( mysql_query("select * from table-name where link= '$match[0]'",$con));
}
$data = substr_replace($data,"http://mydomain-url?link=".$id['id'],$match[1], strlen($match[0]) );
}
}
mysql_close($con);
echo $data;
?>
[/PHPS]
خوب این اسکریپت اول میاد اطلاعات صفحه ای که ادرسش http://destination-url هست رو میگیره بعد تمام لینک هارو از توش استخراج میکنه و تو پایگاه داده ذخیره میکنه بعدش میاد جای لینک ها ادرس دامین من رو به همراه یه کد شناسایی لینک:
"[LTR]"http://mydomain-url?link=".$id['id'][/LTR]
قرار میده و میفرسته برای کلاینت.
حالا کلاینت از هر لینکی که درخواست اطلاعات داشته باشه با توجه به ادرسش وصل میشه به سرور من و از روی کد شناسایی که به صورت get برای سرورم فرستاده شده لینک اصلی رو از توی پایگاه داده استخراج میکنم و تمام اطلاعات هدر که از سمت کلاینت اومده رو میفرستم برای اون لینکی که از پایگاه دادم در آوردم
بعدش جوابی که میاد error 404 بهم میده!!!! چرا؟
حالا اگه اطلاعات هدر که از سمت کلاینت اومده رو نفرستم دیگه error 404 نمیده. چرا؟
لطفا دوستان کمک کنند
آقا من میخوام که یه کدی بنویسم که عین تمام اطلاعات header و content که از سمت سرور میاد رو بگیره و با ایجاد تغییرات در content عین همون header اومده از کلاینت و content منو بفرسته برای یه سرور دیگه و عین جوابی که از سمت سرور میاد رو (header و content) بفرسته برای کلاینت
میشه دوستان کمک کنند؟
من کد قسمت اول رو به این صورت نوشتم:
[PHPS]
<?php
require_once 'db.php';
if (isset($_GET['link'])) {
$link = mysql_fetch_assoc( mysql_query("select * from table-name where id= '".$_GET['link']."'",$con));
$url= $link['link'];
set_time_limit ( 120 );
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10);
$header= getallheaders ();
$head= "<?php\r\ncurl_setopt(\$ch,CURLOPT_HTTPHEADER,array(";
for ($i=1; $i<= count ($header); $i++) {
$each= each($header);
$head.= "'".$each['key'].": ".$each['value']."',";
}
$head = substr_replace($head ,"",-1);
$head.= "));\r\n?>\r\n";
$handle= fopen('header-option.php', 'w') or die('Cannot open file: header-option.php');
fwrite($handle, $head);
fclose($handle);
include 'header-option.php';
$data = curl_exec ($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
set_time_limit (ini_get('max_execution_time'));
curl_close ($ch);
}
else {
$url="http://destination-url";
set_time_limit ( 120 );
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10);
$data = curl_exec ($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
set_time_limit (ini_get('max_execution_time'));
curl_close ($ch);
$count= preg_match_all('@"(http
foreach (array_reverse($matches[1]) as $match) {
$id = mysql_fetch_assoc( mysql_query("select * from table-name where link= '$match[0]'",$con));
if ( !$id ) {
mysql_query("INSERT INTO table-name (link) VALUES ('$match[0]')",$con);
$id = mysql_fetch_assoc( mysql_query("select * from table-name where link= '$match[0]'",$con));
}
$data = substr_replace($data,"http://mydomain-url?link=".$id['id'],$match[1], strlen($match[0]) );
}
}
mysql_close($con);
echo $data;
?>
[/PHPS]
خوب این اسکریپت اول میاد اطلاعات صفحه ای که ادرسش http://destination-url هست رو میگیره بعد تمام لینک هارو از توش استخراج میکنه و تو پایگاه داده ذخیره میکنه بعدش میاد جای لینک ها ادرس دامین من رو به همراه یه کد شناسایی لینک:
"[LTR]"http://mydomain-url?link=".$id['id'][/LTR]
قرار میده و میفرسته برای کلاینت.
حالا کلاینت از هر لینکی که درخواست اطلاعات داشته باشه با توجه به ادرسش وصل میشه به سرور من و از روی کد شناسایی که به صورت get برای سرورم فرستاده شده لینک اصلی رو از توی پایگاه داده استخراج میکنم و تمام اطلاعات هدر که از سمت کلاینت اومده رو میفرستم برای اون لینکی که از پایگاه دادم در آوردم
بعدش جوابی که میاد error 404 بهم میده!!!! چرا؟
حالا اگه اطلاعات هدر که از سمت کلاینت اومده رو نفرستم دیگه error 404 نمیده. چرا؟
لطفا دوستان کمک کنند
آخرین ویرایش: