2013-07-29 4 views
0

SQL 데이터베이스에서 .SVG 파일을 즉석에서 생성하고 페이지에 임베드하고 사용자가 상호 작용할 수있게하는 PHP 웹 페이지를 개발하는 중입니다. 이러한 임시 파일은 SVG [RandomNumber] .svg 형식을 취하며 링크 해제 함수는 오류 메시지없이 파일을 성공적으로 삭제합니다.PHP : 너무 간단하게 링크 해제

여기에 문제가있다 : 나는 SVG 파일이 사용자에 대한로드 한 후 나는 링크 해제 기능을 호출하는 경우 사용자의 브라우저가 파일이나 이것 저것을 캐시 것 때문에, 웹 페이지가 영향을받지 않을 것이라고 가정했다. 코드에 링크 해제 명령이 없으면 모든 것이 완벽하게 작동합니다. 그러나 '링크 해제'는 웹 페이지의 끝 부분에서도 어디에도 표시되지 않습니다. 파이어 폭스에는 개체의 흔적이 없으며 Internet Explorer에서 "웹 페이지를 찾을 수 없습니다."라는 오류가 표시됩니다.

브라우저를 업로드하기 전에 파일을 삭제 했습니까? 일반적인 상황을 처리하는 가장 좋은 방법은 무엇입니까?

감사합니다.

+1

* 이미지로드 후 또는 * 페이지 뒤에서 실제로 연결 해제 하시겠습니까? * (이미지가 포함 된)로드? 둘 다 실제로 동시에 일어날 수는 없습니다 ... 이미지를로드하기 전에 브라우저가 페이지를 가져와 파싱해야합니다. – cHao

+0

설명해 주셔서 감사합니다. 나는 약간 새로운 개발이고 다양한 엔터티가로드되는 순서를 파악하지 못했습니다. 페이지 로딩이 끝나기 전에도 명령을 실행했다고 가정합니다. 명령을 호출 할 수있는 더 좋은 곳이 있습니까? 또는 이러한 임시 파일을 자동으로 제거하는 또 다른 일관된 방법이 있습니까? – user2629001

+0

개인적으로 정적 파일에 대한 링크가 아닌 PHP 스크립트를 통해 파일을 제공한다고 생각할 수도 있습니다. 스크립트는 물론 파일이 다운로드되었음을 알 것이며 안전하게 삭제할 수 있습니다. 이 시점에서 이미지의 성격에 따라 잠시 동안 파일을 그대로 두는 것이 좋습니다. – cHao

답변

0

워크 플로를 변경하고 임시 파일을 만들면 유용 할 수 있습니다. 이미지가 한 번만 사용되거나 세대가 중요하지 않은 경우 다음과 같은 방식으로 즉시 생성하려고 시도 할 수 있습니다.

<?php 
// We'll be outputting a SVG 
header('Content-type: Content-Type: image/svg+xml'); 

// It will be called image.svg 
header('Content-Disposition: attachment; filename="image.svg"'); 

// Don't cache 
header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: " . date("D, j M Y H:i:s")); 

// The PDF source is in original.pdf 
generate_svg_from_db('image.svg'); 
?> 
+0

나는 그 접근법을 조사해야 할 것이다. (이전에 header() 명령을 사용 해본 적이 없다.) 내가 전에했던 것은 * echo *를 사용하여 웹 페이지에 가짜 SVG 엔티티를 '인쇄'하는 것이다. 이렇게하면 작동하는 페이지가 생성되었지만 HTML 유효성 검사 오류가 작성되어 즉시 파일을 작성한 후 임베드하고 삭제하는 것이 더 나을 것이라고 생각했습니다. 그러나 대체 워크 플로 아이디어가 마음에 듭니다. – user2629001