누군가 도와 드릴 수 있기를 바랍니다.produt 데이터 피드를 만들기 위해 단일 PHP 및 MySql 쿼리에서 여러 개의 연속 된 파일에 데이터를 저장하는 방법
아래의 PHP 코드는 데이터베이스에서 사용 가능한 모든 제품을 가져 와서 xml 파일 (somefile.xml)에 로컬로 저장하여 google이 매일 방문 할 수 있도록합니다. 우리 가맹점 계정을 유지하거나 구글 기반으로 알려진 최신.
내 인벤토리가 200,000 개가 넘는 제품으로 증가 했으므로 Google은 20MB가 넘는 파일을 더 이상 허용하지 않으며 작은 파일로 나눠달라고 요청했습니다.
그래서이 쿼리를 여러 파일로 저장하는 방법을 찾고 있는데, 새로운 파일을 순차적으로 새 파일 이름 (예 : somefile1.xml, somefile2.xml, etc. etc). 각 파일에서 xml 파일 머리글과 바닥 글을 유지 관리합니다.
$fp = fopen(BASE_PATH.'/somefile.xml','w');
$db->query("
SELECT ".DB_PREFIX."products.*,
WHERE ".DB_PREFIX."products.available='Yes'
ORDER BY title
");
///header
$xmlPacket =
'<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>'.$settings["GlobalSiteName"].'</title>
<link>'.$settings["GlobalHttpUrl"].'</link>
while($db->moveNext()){
$product_url = $db->col["product_url"];
$name = $db->col["title"];
$condition = $db->col["condition"];
///products
$xmlPacket .=
"\n<item>
<title>".st_normalize($name)." (SKU ".st_normalize($pid).")</title>
<link>".st_normalize($product_url)."</link>
<g:condition>".st_normalize($condition)."</g:condition>
</item>\n";
}
///footer
$xmlPacket .=
'</channel>
</rss>';
fwrite($fp,$xmlPacket);
fclose($fp);
누군가가이를 수행하는 방법을 알고 있다면 의견을 나누십시오.
감사합니다. 좋은 하루 되세요!
감사합니다! 빠른 답장 EdoDodo. 그것은 많은 의미가 있습니다. 그러나 쿼리를 실행할 때 경고 : fwrite() : 제공된 인수는 fwrite ($ fp, "\ n- \ n
등) 위를 가리키는 161 번째 줄에 유효한 스트림 리소스가 아니며 또한 경고 : fwrite() :와 fclose() : 제공된 인자가 마지막 줄 fwrite ($ fp, $ footer)와 fclose ($ fp)를 두드리는 164,164 줄의 유효한 스트림 자원이 아닙니다; 이 문제가 발생하는 이유는 무엇입니까? –
luiavag
그래, 내가 잘못 생각한 것 같아. 지금 수정해야 코드를 다시 실행하십시오. – EdoDodo
감사합니다. 별이 가네요, 쿼리가 지금 실행 중입니다. 하지만 MAX_ROW에 도달 할 때까지 파일 당 머리글과 바닥 글이있는 1 행을 저장합니다. 머리글과 바닥 글이없는 나머지 행의 마지막 파일을 저장합니다. – luiavag